让扫描仪读取文本文件

时间:2013-09-26 17:58:35

标签: java

我正在尝试使用扫描仪来阅读使用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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

除了blackpanthers的答案,你还应该使用trim()来考虑whitespaces.as “abc”不等于“abc”

答案 2 :(得分:0)

你必须寻找

,; 。 ! ?等

每个单词。 next()方法会抓取整个字符串,直到它到达empty space

会考虑“嗨,你好吗?”如下“嗨”,“如何”,“是”,“你?”。

您可以使用indexOf(String)方法查找这些字符。您还可以使用replaceAll(String regex,String replacement)替换字符。您可以个性化删除每个角色,也可以使用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

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

Regex for special characters in java

Parse and remove special characters in java regex

Remove all non-"word characters" from a String in Java, leaving accented characters?

答案 3 :(得分:0)

你应该看看matches()

equals对您没有帮助,因为next()不会逐字返回文件, 而是空格(逗号,分号等)按令牌分隔令牌(如其他人提到的那样)。

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

......和一个小例子。

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

.是正则表达式通配符,代表任何符号。 .*代表0个或更多未定义的符号。如果输入位于word中的某个位置,那么你得到一个匹配。