Scan,Strings和TextArea的问题

时间:2011-09-07 20:43:32

标签: java search textarea java.util.scanner

我正在尝试构建一个搜索按钮。单击搜索按钮后,它将从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 个答案:

答案 0 :(得分:2)

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 :(得分:1)

您的问题是它会为所有单词设置标签的文本,但会很快这样做,以至于您没有时间阅读它。如果你想慢慢地做,你需要使用一些东西来减慢循环,例如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

如果要打印是,如果找到任何匹配项,那么如果找到任何匹配项,则需要更改逻辑以设置文本字段,然后退出方法。如果未找到匹配项(您已到达while循环的结尾),则在那里设置标签:

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