Bo'shliqlarni foydalanuvchi kiritgan satrdan olib tashlash

Men foydalanuvchi kirish satrida bo'shliqlarni olib tashlash uchun kod yaratishga harakat qilaman, lekin 16-satrda xato yuzaga keladi.

"asosiy" jildidagi istisno java.lang.ArrayIndexOutOfBoundsException:   15 practice5.main (practice5.java16)

Eslatma: Biz Java-ning o'rnini o'zgartirish usulini ishlatishga ruxsat berilmaydi. Men uni qo'lda kodlashim kerak.

Mana mening kodim:

import java.util.Scanner;

public class practice5{
    public static void main(String args[]){
        Scanner scanner = new Scanner(System.in);
        String line;
        System.out.print("Sentence: ");
        line = scanner.nextLine();
        char phrase[] = line.toCharArray();
        int i = 0;
        int n = 0;

        while(phrase[i] != '\0') {
            if(phrase[i] == ' ') {
                for(n=i; n

Rahmat!

1
Agar siz satr oxiriga yetib borsangiz, siz "Loop" ni to'xtatishingiz kerak
qo'shib qo'ydi muallif Jens, manba

6 javoblar

Quyidagi kodni ishlatib ko'ring, bu yordam berishi mumkin

public static void main(String args[]) {

    Scanner scanner = new Scanner(System.in);
    String line;
    System.out.print("Sentence: ");
    line = scanner.nextLine();
    char phrase[] = line.toCharArray();
    String result = "";

    for (int i = 0; i < phrase.length; i++) {
        if (phrase[i] != ' ') {
            result += phrase[i];
        }           
    }

    System.out.println(result);
}
2
qo'shib qo'ydi
agar u shartlarni char majmuasida har doim saqlab qolmasa yaxshi ishlaydi. agar siz = ni ichkariga ko'chirsangiz va shartni bekor qilsangiz, davom etishni o'chirib tashlashingiz mumkin
qo'shib qo'ydi muallif XtremeBaumer, manba
@XtremeBaumer taklif, yangilangan javob uchun rahmat!
qo'shib qo'ydi muallif Naman, manba

Xato sababi: ArrayIndexOutOfBound

agar sizning kodingizni amalga oshirsangiz ... bu sodir bo'layapti ... ".

i - bu indeks 1da (ya'ni, b) va uchinchi iteratsiya bo'yicha, i 0 indeksida (ya'ni, a) i <4> ni bosing va i yana 1 marta oshiriladi.

while(phrase[i]!='\0')

bu kabi istisnolarni qaytaradi, chunki siz indeks 4da qiymatni taqqoslayapsiz, shuning uchun mavjud emas. Shunday istisno yuzaga keladi.

1
qo'shib qo'ydi

"asosiy" jildidagi istisno java.lang.ArrayIndexOutOfBoundsException:   15 practice5.main (practice5.java16)

ArrayIndexOutOfBoundsException bir qator elementiga chaqiruv mavjud bo'lmagan katalogda yaratilganda tashlanadi.

O'z kodingizda, 16-satrda n == (phrase.length-1) dan tashqari, barcha holatlar uchun yaxshi ishlaydigan phrase [n + 1] deyiladi. keyin n + 1 phrase.length ga teng bo'ladi.

Uzunligi 1dan boshlab sanaladi, indekslar 0 dan boshlab sanaladi. Shu sababli, oxirgi iteratsiya vaqtida phrase [n + 1] phrase [phrase.length] bu indekslardan tashqarida bo'lgan.

Siz loop yinelemelerini 1 ga kamaytirish bilan o'zgartirishingiz mumkin.

1
qo'shib qo'ydi
@Katrina sizning loopingiz uchun (n = i; n
qo'shib qo'ydi muallif adeen-s, manba
Salom, simvollar har safar ko'chib o'tmasligini so'rashim mumkin: gap [n] = iboralar [n + 1]; phrase.length ham kichikroq bo'ladimi? Bundan tashqari, javobingiz uchun rahmat. Men nima demoqchi ekanligimni tushunaman, lekin buni qanday kodlashni amin emasman:/(n = i-1; n
qo'shib qo'ydi muallif Katrina, manba
Xristian @ adeen-s, men buni ham sinab ko'rdim va men hali ham bir xil xatolarni qabul qilaman :(
qo'shib qo'ydi muallif Katrina, manba

String sinfi funktsiyasidan foydalanishingiz mumkin. Faqat line.replace ("", "") dan foydalaning

1
qo'shib qo'ydi
Salom, professorimiz uni qo'lda kodlashni talab qiladi. Ammo rahmat, men uni izlayman.
qo'shib qo'ydi muallif Katrina, manba
Keyin loopni to'xtatishingiz kerak, masalan. agar (i> phrase.length) tanaffus;
qo'shib qo'ydi muallif Markus, manba

Nima uchun g'ildirakni qayta kashf etmoqchisiz? Stringning replace usuli:

String output = line.replace(" ", "");
0
qo'shib qo'ydi
@Katrina siz ushbu ma'lumotni sizning savolingizga qo'shishingiz kerak, shuning uchun boshqalar bunga javob berishlari mumkin.
qo'shib qo'ydi muallif QBrute, manba
Salom, rahmat, lekin professorim uni qo'lda kodlashni talab qiladi :)
qo'shib qo'ydi muallif Katrina, manba
Siz haqsiz, hozir uni tahrir qilaman. Buning uchun usul mavjudligini tushunmadim. :)
qo'shib qo'ydi muallif Katrina, manba

Aniqlash uchun CharMatcher dan foydalaning

Unicode-ga ko'ra, belgi bo'shliq bo'ladimi-yo'qmi   standart

CharMatcher.whitespace().trimAndCollapseFrom("user input","");
0
qo'shib qo'ydi