gpt4 book ai didi

java - 实现 useDelimiter 方法

转载 作者:行者123 更新时间:2023-12-02 07:48:34 25 4
gpt4 key购买 nike

我有以下代码,请记住我刚刚开始学习一门语言,并且一直在寻找相当简单的练习。欢迎编码礼仪和批评。

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}");

提供如下所示文本文件中显示的输出。

the the the the the

frog frog

ran

ran ran ran

fast, fast fast

far, far, far far far far far

如果 useDelimiter 应该考虑标点换行等,为什么输出会有如此大的差异?可能非常简单,但还是首先尝试一个程序。预先感谢您的任何建议。

最佳答案

使用 word.useDelimiter("\\p{Punct}\\p{Space}") 您实际上是在告诉扫描器查找由标点符号组成的分隔符,后跟 一个空格后跟另一个空白字符。您可能想要其中一个(而且只有一个),这可以通过类似的方法来实现

word.useDelimiter("\\p{Punct}|\\p{Space}");

至少其中一个,看起来像

word.useDelimiter("[\\p{Punct}\\p{Space}]+");

更新

@Andrzej 很好地回答了您的代码注释中的问题(我忘记了),但是他错过了一个小细节,我想在这里扩展/直接放在这里。

why does n++ and n+1 give you different results

这显然与该行有关

            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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com