我正在尝试使用扫描仪来阅读使用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++;
}
答案 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.
详细了解此方法:
这是一个正则表达式的例子:
//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
中的某个位置,那么你得到一个匹配。