Частота печати слова - PullRequest
       1

Частота печати слова

1 голос
/ 02 февраля 2020

Я написал фрагмент кода для печати частоты слов в строке, но если я введу несколько пробелов, я получу количество пробелов в выводе.

//import the necessary packages if needed
import java.util.*;   
@SuppressWarnings("unchecked")//Do not delete this line
public class CountOfWords
{
         public static void main (String[] args) {
             Scanner sc=new Scanner(System.in);

             System.out.println("Enter Student's Article");
             StringBuilder sb=new StringBuilder(sc.nextLine());

             String str=sb.toString().toLowerCase().replaceAll("[,;:.?!]","");

             List<String> list = Arrays.asList(str.split(" "));

             System.out.println("Number of words "+list.size());

              SortedSet<String> uniqueWords = new TreeSet<String>(list);
             System.out.println("Words with the count");

              for(String s:uniqueWords)
              {
                  int freq=Collections.frequency(list,s);
                  System.out.println(s+": "+freq);
              }

         }
}

Запуск программы:

Enter Student's Article
hello Hello HEllo hi hi: hi! Welcome,   welcome                                                         
Number of words 10                                                              
Words with the count                                                            
: 2                                                                             
hello: 3                                                                        
hi: 3                                                                           
welcome: 2 

Как мне это исправить?

Ответы [ 3 ]

2 голосов
/ 02 февраля 2020

Вы можете использовать регулярное выражение для обнаружения нескольких пробелов

str.trim().split("\\s+");

Вам необходимо вызвать метод trim перед разбиением по токенам. В противном случае вывод «Переполнение стека» (один пробел в начале предложения) может быть [" ", "Stack", "Over", "Flow"]

1 голос
/ 02 февраля 2020

Вы должны использовать регулярные выражения для разбиения:

List<String> list = Arrays.asList(str.split("\\s+"));

Здесь может быть ссылка: https://javarevisited.blogspot.com/2016/10/how-to-split-string-in-java-by-whitespace-or-tabs.html

Для вашего первоначального подхода просто помещая пробел, то есть "", в метод split (), он остановил бы обработку последующего пробела, когда он встретил первое вхождение; что приводит к ожидаемому результату, с которым вы столкнулись.

1 голос
/ 02 февраля 2020

Замените для l oop на это:

for(String s : uniqueWords){
   if (!s.equals(" ")) {
      int freq = Collections.frequency(list, s);
      System.out.println(s + ": " + freq);
   }
}

Здесь только строки, не равные "", выводятся на ваш вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...