Токенизация строки в Java без использования split () - PullRequest
0 голосов
/ 13 мая 2018

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

public static String[] tokenize(String sentence) {
int wordCount = countWords(sentence);
String[] sentenceWords = new String[wordCount];
int curWord = 0;
char letter;

for(int i = 0; i < sentence.length()-1; i++) {
letter = sentence.charAt(i);
if (letter == ' ') {
  curWord++;
  continue;
}
System.out.println (sentenceWords[curWord]);
sentenceWords[curWord] = String.format("%s%c", sentenceWords[curWord], letter);
System.out.printf("%s\n", sentenceWords[curWord]);
}
return sentenceWords;
}

Вывод для этого метода был совершенно неверным.Я получил вывод, заполненный кучей нулей, и каждое слово было в новой строке.

Я также попробовал другой вариант, но не слишком далеко с ним:

public static String[] tokenize(String sentence) {
int wordCount = countWords(sentence);
String[] sentenceWords = new String[wordCount];
for(int i = 0; i < sentence.length()-1; i++) {
if(sentence.contains(" ")) {
//Something.....
}
}
return sentenceWords;
}

I 'Я не уверен, какой будет правильный подход.

1 Ответ

0 голосов
/ 13 мая 2018

Если то, что вы пытаетесь сделать, это разделить каждое слово и сохранить его в массиве, это может помочь.

public static String[] tokenize(String sentence) 
{
    int wordCount = countWords(sentence);
    String[] wordArr = new String[wordCount];
    int wordCounter = 0;

    for(int i = 0; i < sentence.length(); i++)
    {
        if(sentence.charAt(i) == ' ' || i == sentence.length() - 1)
        {
            wordCounter++;

        }
        else
        {
            if(wordArr[wordCounter] == null)
            {
                wordArr[wordCounter] = "";
            }
            wordArr[wordCounter] += sentence.charAt(i);
        }

    }

    return wordArr;

}

Это похоже на то, что вы имели, но инициализирует каждое слово в массиве перед добавлением каждого символа, что объясняет, почему выводился ноль.

Это также не сохраняет пробелы только в словах и не учитывает пунктуацию. Надеюсь, это поможет !!

...