Sam Hartmann Ответов: 4

Мне нужно выяснить, как найти количество раз, когда слово the появляется в предложении


Я обнаружил, что код внизу работает, но он не находит the в начале предложения

Что я уже пробовал:

private class ListenerThe implements ActionListener
  {
     public void actionPerformed(ActionEvent e)
     {
        String str = tf.getText();
        str = str.toLowerCase();
        int count = 0;
        count =0;
       for(int i=1; i<=str.length()-3; i++)
           {

          if(str.substring(i,i+3).equals("the") && !Character.isLetter(str.charAt(i-1)) && !Character.isLetter(str.charAt(i+3)))
                count++;
        }
        answer.setText("There are "+count+" The's in this sentence");
     }
  }

4 Ответов

Рейтинг:
2

phil.o

for(int i=1; i<=str.length()-3; i++)

Поскольку вы начинаете цикл for с индекса 1, вы начинаете анализировать строку со второго символа, а не с первого. Ява индексы отсчитываются от нуля.
Я думаю, что метод помощи indexOf[^] гораздо более подходит для вашего требования.


Maciej Los

5ed!

Рейтинг:
2

Patrice T

Этот код не работает, если слово " the " является первым или последним словом в предложении.

Цитата:
Я обнаружил, что код внизу работает, но он не находит the в начале предложения

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.

Для использования с отладчиком измените код на
for(int i=1; i<=str.length()-3; i++)
{
   String c1 = str.substring(i,i+3);
   String c2 = str.charAt(i-1);
   String c3 = str.charAt(i+3);
   if(str.substring(i,i+3).equals("the") && !Character.isLetter(str.charAt(i-1)) && !Character.isLetter(str.charAt(i+3)))
         count++;
}

чтобы увидеть, какие значения используются в if во время отладки.


Рейтинг:
1

MadMyche

Если вам просто нужен счетчик, вы всегда можете использовать функцию String.split() для преобразования строки в массив, а затем использовать значение array.length.

Вам нужно было бы быть осторожным, если бы первое или последнее слово строки было тем словом, которое вы искали.

Строка (Java Platform SE 7 )[^]


Maciej Los

5ed!

MadMyche

Спасибо

Рейтинг:
1

Maciej Los

Я бы рекомендовал использовать регулярные выражения. Видеть: Регулярные Выражения Java[^]

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexMatches {

   private static final String REGEX = "\\bcat\\b";
   private static final String INPUT = "cat cat cat cattie cat";

   public static void main( String args[] ) {
      Pattern p = Pattern.compile(REGEX);
      Matcher m = p.matcher(INPUT);   // get a matcher object
      int count = 0;

      while(m.find()) 
         count++;
      
      System.out.println("Number of matches: "+count);

   }
}


phil.o

Хорошая штука, моя пятерка!

Maciej Los

Спасибо.

MadMyche

+5

Maciej Los

Спасибо.