我有以下代码,请记住我刚刚开始学习一种语言,而这种语言一直在寻找相当简单的练习。编码礼节和批评家表示欢迎。

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/

10-10 20:46