我正在尝试构建一个搜索按钮。单击搜索按钮后,它将从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();
}
如果我加上休息;之后,它会搜索第一个单词。所以它告诉我,我的逻辑必须有些瑕疵,不能这样做。
答案 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();