Есть ли способ println перечислять и перечислять слова в строке? - PullRequest
1 голос
/ 01 мая 2019

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

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

public class MySentenceCounter {
    public static void main(String[] args) {
        String sentence = "This is my sentence and it is not great";

        String[] wordArray = sentence.trim().split("\\s+");
        int wordCount = wordArray.length;
        for (int i=0; i < sentence.length(  ); i++)
            System.out.println("Char " + i + " is " + sentence.charAt(i)); 
        //this produces the character count but I need it to form words, not individual characters.

        System.out.println("Total is " + wordCount + " words.");
    }
}

Ожидаемые результаты должны выглядеть следующим образом:

1 This
2 is
3 my
4 sentence
5 and
6 it
7 is
8 not
9 great
Total is 9 words.

Ответы [ 3 ]

1 голос
/ 01 мая 2019

Перебирайте созданную вами переменную wordArray вместо исходной строки sentence в цикле for:

public class MySentenceCounter {
  public static void main(String[] args) {
    String sentence = "This is my sentence and it is not great";
    String[] wordArray = sentence.trim().split("\\s+");
    // String[] wordArray = sentence.split(" "); This would work fine for your example sentence
    int wordCount = wordArray.length;
    for (int i = 0; i < wordCount; i++) {
      int wordNumber = i + 1;
      System.out.println(wordNumber + " " + wordArray[i]);
    }
    System.out.println("Total is " + wordCount + " words.");
  }
}

Вывод:

1 This
2 is
3 my
4 sentence
5 and
6 it
7 is
8 not
9 great
Total is 9 words.
0 голосов
/ 01 мая 2019

Старайтесь избегать слишком больших сложностей, ниже это прекрасно

public class MySentenceCounter {
    public static void main(String[] args) {
        String sentence = "This is my sentence and it is not great";
        int ctr = 0;
        for (String str : sentence.trim().split("\\s+")) {
            System.out.println(++ctr + "" + str) ;
         } 
         System.out.println("Total is " + ctr + " words.");
    }
}
0 голосов
/ 01 мая 2019

Немного более элегантное решение, использующее IntStream вместо цикла for:

import java.util.stream.IntStream;

public class ExampleSolution
{
    public static void main(String[] args)
    {
        String sentence = "This is my sentence and it is not great";

        String[] splitted = sentence.split("\\s+");
        IntStream.range(0, splitted.length)
                .mapToObj(i -> (i + 1) + " " + splitted[i])
                .forEach(System.out::println);

        System.out.println("Total is " + splitted.length + " words.");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...