Разделение слов из строки с использованием методов indexOf и substring в Java

Эй, я пытаюсь написать программу на Java, которая отделяет слова от строки, используя только подстроку и indexOf. Я уже сделал этот код, и он работает почти идеально, но печатает много пустой строки после печати слов.

class wordSep{
    public static void main(String args[]){
        String line = "The world is full of strangers";
        String word = line.substring(0,line.indexOf(" "));
        int index = line.length()-1;
        while(index>=0){
            System.out.println(word);
            line = line.substring(line.indexOf(" ") + 1) + " ";
            word = line.substring(0,line.indexOf(" "));
            index--;
        }
    }
}

Результатом этого будет:

The
world
is
full
of
strangers
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line
\\empty line

Я думаю, что это связано с состоянием моего цикла while. Мне нужен вывод без этих пустых строк. Пожалуйста, помогите, спасибо.


person patmarley    schedule 11.09.2014    source источник


Ответы (4)


Замените while(index>=0) на while(!word.isEmpty()) и избавьтесь от index

person Jean Logeart    schedule 11.09.2014
comment
Извините, я только что создал эту учетную запись несколько минут назад, как я могу проголосовать? Редактировать: лол, кажется, я уже проголосовал, что за нуб. - person patmarley; 11.09.2014
comment
@patmarley кто-то еще проголосовал за этот ответ, вам нужна репутация, чтобы проголосовать. Взгляните на ссылку. - person Pham Trung; 11.09.2014
comment
@patmarley Вы сможете проголосовать, когда ваша учетная запись будет иметь репутацию не менее 15. Дополнительные сведения см. в разделе привилегии. А пока вы можете принять один из ответов, который вы считаете наиболее полезным. - person Pshemo; 11.09.2014
comment
@Jean - Если меня попросили не использовать .isEmpty(), какое еще условие я могу использовать для своего оператора while? - person patmarley; 15.09.2014

Это здорово, что ваша проблема решена, но было бы здорово, если бы вы попытались использовать некоторые встроенные функции (например, String.split()) и библиотеки в своем коде, так как это может сократить объем обработки и сделать ваш код более надежным и независимым от длины строки и других параметров.

Ваш код может быть оптимизирован до этого уровня...

 class wordSep{
    public static void main(String args[]){
        String line = "The world is full of strangers";
        String[] word = line.split(" ");
        for(String str: word){
            System.out.println(str);
        }
    }
}

вывод -

The
world
is
full
of
strangers

Теперь вы также можете использовать String Tokenizer, но это больше не рекомендуется...

Прочитайте это -> для полностью понять, как разделить строки в Java на какой-либо символ или использовать некоторые регулярные выражения и другие параметры

person Hitesh Garg    schedule 11.09.2014
comment
Я видел ваше решение еще до публикации этого вопроса, и если ваше применимо, я не буду задавать эту проблему. Мой требует разделить строку без использования разделения и массива. Спасибо, в следующий раз внимательно читайте заголовок. Мир! - person patmarley; 15.09.2014
comment
Я прошу прощения за это. Я думал, что у вас уже есть решение, поэтому я должен предложить вам что-то другое. Итак, просто для улучшения, если вы не жестко закодировали свою строку, есть шансы получить nullPointerException, вы можете увидеть, как этого избежать, в примере по ссылке ниже. Хотя он использует некоторые дополнительные строки, строки менее важны, чем стабильность кода.... ideone.com/x7TdksСпасибо за предложение.... - person Hitesh Garg; 16.09.2014

Дж. Лаки, вы можете уменьшить количество подачек и их размер, например:

class Extract
{
    void Substring()
    {    
        String s = "The World is Full of Strangers.";
        s = s + " "; 
        int idxOfNextWord = 0;
        for(int i = 0; i < s.length(); i++) 
        {
            if(s.charAt(i)== ' ') 
            {
                System.out.println(s.substring(idxOfNextWord, i));
                idxOfNextWord = i+1;
            }            
        }
    }
}
person Abhinav    schedule 22.12.2015

Несмотря на то, что вы, похоже, исправили проблему, все равно опубликуете этот ответ. Я считаю, что ваш код можно свести к минимуму всего в несколько строк, например:

String line = "The world is full of strangers";
int idxOfNextWord = 0;
for (int i = 0; i < line.length(); i++) {
    if(line.charAt(i)==' ') {
        System.out.println(line.substring(idxOfNextWord, i));
        idxOfNextWord = i+1;
    }            
}
System.out.println(line.substring(idxOfNextWord));
person lxcky    schedule 11.09.2014
comment
Спасибо, это здорово иметь несколько строк, и я ценю это. - person patmarley; 11.09.2014
comment
При этом не учитывается последнее слово. - person Adam Arold; 21.12.2014
comment
@AdamArold, да, это так. Это цель последней СОП. - person lxcky; 05.01.2015