我有以下代码,请记住我刚刚开始学习一种语言,而这种语言一直在寻找相当简单的练习。编码礼节和批评家表示欢迎。
import java.util.*;
import java.io.*;
public class Tron
{
public static void main(String[] args) throws Exception
{
int x,z,y = 0;
File Tron= new File("C:\\Java\\wordtest.txt");
Scanner word = new Scanner(Tron);
HashMap<String, Integer> Collection = new HashMap<String, Integer>();
//noticed that hasNextLine and hasNext both work.....why one over the other?
while (word.hasNext())
{
String s = word.next();
Collection.get(s);
if (Collection.containsKey(s))
{
Integer n = Collection.get(s);
n = n+1;
Collection.put(s,n);
//why does n++ and n+1 give you different results
}else
{
Collection.put(s,1);
}
}
System.out.println(Collection);
}
}
在不使用
useDelimiter()
的情况下,将根据我拥有的文件获得所需的输出:Far = 2, ran = 4, Frog = 2, Far = 7, fast = 1, etc...
插入
useDelimiter
方法如下Scanner word = new Scanner(Bible);
word.useDelimiter("\\p{Punct} \\p{Space}");
提供以下显示在文本文件中的以下输出。
的
青蛙青蛙
跑了
跑了跑了
快快快
很远很远
如果
useDelimiter
应该解释标点符号,换行符,为什么输出会有这种差异?可能非常简单,但还是再次尝试了一个程序。在此先感谢您的任何建议。 最佳答案
使用word.useDelimiter("\\p{Punct} \\p{Space}")
实际上是在告诉扫描程序查找由标点符号,空格后跟另一个空格字符组成的定界符。您可能想拥有其中一个(也只有一个),这可以通过类似的方法来实现
word.useDelimiter("\\p{Punct}|\\p{Space}");
或至少其中之一,看起来像
word.useDelimiter("[\\p{Punct}\\p{Space}]+");
更新资料
@Andrzej很好地回答了您的代码注释中的问题(我忘记了),但是他错过了一个小细节,我想在此处进行扩展。
为什么n ++和n + 1给您不同的结果
这显然与生产线有关
n = n+1;
我的直觉是您尝试的替代方法是
n = n++;
确实会产生混乱的结果(即最终结果是
n
不递增)。原因是
n++
(后缀增量运算符的规范名称)使n
的值递增,但表达式的结果是n
的原始值!所以正确的使用方法就是 n++;
结果等于
n = n+1
。这是a thread with code example,希望可以帮助您更好地了解这些操作员的工作方式。
关于java - 实现useDelimiter方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10515298/