Подсчет частоты струны - PullRequest
       12

Подсчет частоты струны

2 голосов
/ 20 октября 2011

Я по сути хочу найти частоту строки. Например, если я передаю слово «Я», то частота слова в следующем предложении: « Я пошел на пляж и Я увидел трех человек» должно быть 2. Я построил такой метод, в котором я беру текст (любой длины), разделяю его на массив по пробелу и перебираю массив, ища, соответствует ли каждый индекс слову. Затем я увеличиваю счетчик частоты и возвращаю число в виде строки. Вот метод:

private int freq() {
String text = "I went to the beach and I saw three people";
String search = "I";
String[] splitter = text.split("\\s+");
int counter = 0;
   for (int i=0; i<splitter.length; i++)
   {
       if (splitter[i]==search) 
       {
           counter++;
       }
       else
       {

       }
   }
   return counter;
       }

}  

Это вне метода:

String final = Integer.toString(freq());
System.out.println(final);

Но когда я запускаю это, я продолжаю получать 0 в результате. Я не знаю, что я делаю не так.

РЕДАКТИРОВАТЬ: Вы все правильно! Какая пустая трата вопроса :(.

Ответы [ 8 ]

6 голосов
/ 20 октября 2011

Используйте equals вместо ==

if (text[i].equals(search) )
   {
       counter++;
   }

лучшее решение

Используйте карту для сопоставления слов Map<String,Integer> с частотой.

String [] words = line.split(" ");

Map<String,Integer> frequency = new HashMap<String,Integer>();

for (String word:words){

    Integer f = frequency.get(word);
    //checking null
    if(f==null) f=0;
    frequency.put(word,f+1);
}

Тогда вы можете найти определенное слово с помощью:

frequency.get(word)
2 голосов
/ 20 октября 2011

Используйте метод equals() для сравнения строки.

if(text[i].equals(search))
{
   counter++;
}
1 голос
/ 20 октября 2011
private int freq() {
    String text = "I went to the beach and I saw three people";
    String search = "I";
    String[] splitter = text.split("\\s+");
    int counter = 0;
/* problem: You want to be looping over splitter. */
    for (int i=0; i<text.length; i++)
    {
/* problem: splitter[i].equals(search) */
        if (text[i]==search)
        {   
            counter++;
        }   
    }
    return counter;
}
0 голосов
/ 08 февраля 2017

Определите частоту слов в файле.
Это основной код для hashmap в java

File f = new File(fileName);
 Scanner s = new Scanner(f);
   Map<String, Integer> counts =
  new Map<String, Integer>();
      while( s.hasNext() ){
 String word = s.next();
 if( !counts.containsKey( word ) )
 counts.put( word, 1 );
else
 counts.put( word, 
    counts.get(word) + 1 ); 
}
0 голосов
/ 07 октября 2014

Вы можете использовать карту, чтобы поставить слово в качестве ключа и частоту слова в качестве значения. Затем внутри цикла попробуйте использовать блок try-catch, чтобы добавить + 1 к связыванию ключа с текущим словом (tryblock), если слово не найдено, "fdist.get (w)" выдаст nullpointerexception, а затем перехватите с помощью простого 1 для значения.

Map<String,Integer> fdist = new HashMap<String,Integer>();
for(String w:s.split(" ")){
    try {
        fdist.put(word, fdist.get(w)+1);
    } catch (Exception e) {
        fdist.put(word, 1);
    }
}
0 голосов
/ 20 октября 2011

Чтобы ваш код работал, следуйте другим ответам, используйте вместо..lang.CharSequence)

0 голосов
/ 20 октября 2011

Для сравнения двух String вы должны использовать метод equals(), а не простой ==

0 голосов
/ 20 октября 2011

Строки следует сравнивать с String.equals, а не ==, который проверяет, являются ли они одним и тем же объектом , а не если они имеют одинаковое содержимое .

...