IProblems со сканированием, строк и TextArea - PullRequest
1 голос
/ 08 сентября 2011

Я пытаюсь встроить кнопку поиска.При нажатии на кнопку поиска, он будет читать текст из JComponent outTextArea.

Он будет читать каждое слово и сравнивать каждое прочитанное слово со словом, которое я ищу.Моя проблема, это работает, Сорта.Он читает только последнее слово из outTextArea.

Это фрагмент кода

    if(e.getActionCommand().equals("Search"))
    {
        String strSearchString = searchTextField.getText();
        System.out.println(strSearchString);

        String text = outTextArea.getText();
        System.out.println(text);

        Scanner sc = new Scanner(text);


        while(sc.hasNext() == true)
        {
            String s = sc.next();

            if (s.equals(strSearchString) == true)
            {
                searchOutLabel.setText("Yes");
            }

            else
            {
                searchOutLabel.setText("Non!");
            }

        }
        sc.close();


    }

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

Ответы [ 2 ]

2 голосов
/ 08 сентября 2011
String s = sc.next(); //Change to
String s = sc.nextLine();

Аналогичным образом изменить

sc.hasNext(); to 
sc.hasNextLine();

Также добавьте break statement в ваше заявление if true. Как это

if (s.equals(strSearchString) == true)
{
  searchOutLabel.setText("Yes");
  break;
}

else
{

Тогда я должен прокомментировать ваши предпочтения форматирования. Сделай меня счастливым и напиши выше, как это

if (s.equals(strSearchString)) {
  searchOutLabel.setText("Yes");
  break;
} else {
1 голос
/ 08 сентября 2011

Ваша проблема в том, что он установит текст для метки для всех слов, но сделает это так быстро, что у вас не будет времени прочитать его.Если вы хотите сделать это медленно, вам нужно будет использовать что-то для замедления цикла, например, Swing Timer.Также не нужно

if (suchAndSuch == true)

Очиститель просто сделать

if (suchAndSuch)

Например:

  if (e.getActionCommand().equals("Search")) {
     final String strSearchString = searchTextField.getText();
     System.out.println(strSearchString);
     String text = outTextArea.getText();
     System.out.println(text);
     final Scanner sc = new Scanner(text);
     int timerDelay = 2 * 1000;

     new Timer(timerDelay, new ActionListener() {
        public void actionPerformed(ActionEvent e) {
           if (sc.hasNext()) {
              String s = sc.next();
              if (s.equals(strSearchString)) {
                 searchOutLabel.setText("Yes");
              } else {
                 searchOutLabel.setText("Non!");
              }
           } else {
              ((Timer)e.getSource()).stop();
              sc.close();
           }
        }
     }).start();
  }

Изменить 1

Если вы хотите напечатать yes, если какое-либо совпадение было найдено, то вам нужно изменить свою логику, чтобы установить текстовое поле, если какое-либо совпадение найдено, затем выйдите из метода.Если совпадений не найдено (вы достигли конца цикла while), установите там метку:

     while (sc.hasNext()) {
        String s = sc.next();
        if (s.equals(strSearchString)) {
           searchOutLabel.setText("Yes");
           sc.close();
           return;
        }
     }
     searchOutLabel.setText("Non!");         
     sc.close();
...