2013-09-26 151 views
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++; 
} 
+2

给我们一个你的文件内容和输入的例子。 –

+0

你是如何显示inputCount的?你在一些GUI上更新它吗? –

+0

将它打印到控制台。我想这可能是因为这个词后面跟着一段时间。 – user2792660

回答

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?

+0

有没有办法让扫描器忽略标点符号? – user2792660

+0

@ user2792660更新的答案 –

+0

我认为我提供的方法更全面,因为所有东西都被'。*'接受。 replaceAll方法会遇到未指定特殊符号的问题。在这个特殊情况下''''或者一些外国迹象。 – mike

0

如果用户inputed文本在不同的情况下,那么你应该尝试除了blackpanthers使用equalsIgnoreCase()

+0

我想这可能是因为这个词后面跟着一个句点。有没有办法消除这种情况? – user2792660

0

回答,你也应该用TRIM()占whitespaces.as “ABC”不等于到“abc”

0

你应该看看matches()

equals不会帮你,因为next()不按单词返回该文件的话, 而是空白(逗号,分号等)通过令牌分开令牌(如其他人所说)。

这里的Java文档
String#matches(java.lang.String)

...和一个小例子。

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

.是正则表达式通配符,代表任何符号。 .*代表0个或更多未定义的符号。所以你得到一个匹配,如果输入是在word的某处。