1

我正在尝试使用扫描仪读取使用JFileChooser. wordCount工作正常,所以我知道它正在阅读。但是,我无法让它搜索用户输入单词的实例。

public static void main(String[] args) throws FileNotFoundException {
    String input = JOptionPane.showInputDialog("Enter a  word");
    JFileChooser fileChooser = new JFileChooser();
    fileChooser.showOpenDialog(null);
    File fileSelection = fileChooser.getSelectedFile();
    int wordCount = 0;
    int inputCount = 0;
    Scanner s = new Scanner (fileSelection);
    while (s.hasNext()) {
        String word = s.next();
        if (word.equals(input)) {
            inputCount++;
    }
    wordCount++;
}
4

4 回答 4

0

如果用户输入的文本不同,那么你应该尝试使用equalsIgnoreCase()

于 2013-09-26T18:02:30.217 回答
0

除了 blackpanthers 的回答,您还应该使用 trim() 来解释空格。因为“abc”不等于“abc”

于 2013-09-26T18:05:12.717 回答
0

你必须寻找

, ; . !? 等等

对于每个单词。该next()方法抓取整个字符串,直到它碰到一个empty space.

它会考虑“嗨,你好吗?” 如下面的“hi”、“how”、“are”、“you?”。

您可以使用该方法indexOf(String)找到这些字符。您还可以使用 replaceAll(String regex, String replacement) 替换字符。您可以个性删除每个字符,也可以使用 a Regex,但这些通常更难以理解。

//this will remove a certain character with a blank space
word = word.replaceAll(".","");
word = word.replaceAll(",","");
word = word.replaceAll("!","");
//etc.

阅读有关此方法的更多信息:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29

这是一个正则表达式示例:

//NOTE:  This example will not work for you.  It's just a simple example for seeing a Regex.
//Removes whitespace between a word character and . or ,
String pattern = "(\\w)(\\s+)([\\.,])";
word = word.replaceAll(pattern, "$1$3"); 

来源:

http://www.vogella.com/articles/JavaRegularExpressions/article.html

这是一个很好的正则表达式示例,可以帮助您:

java中特殊字符的正则表达式

解析和删除java正则表达式中的特殊字符

从Java中的字符串中删除所有非“单词字符”,留下重音字符?

于 2013-09-26T18:17:26.277 回答
0

你应该看看matches()

equals不会帮助你,因为next()不会逐字返回文件,而是用空格(不是逗号、分号等)逐个标记(正如其他人提到的)。

这里是 java doc
String#matches(java.lang.String)

...和一个小例子。

input = ".*" + input + ".*";
...
boolean foundWord = word.matches(input)

.是正则表达式通配符,代表任何符号。.*代表 0 个或多个未定义的符号。因此,如果输入位于word.

于 2013-09-26T18:25:33.460 回答