gpt4 book ai didi

java - 使用正则表达式一次一个字符地遍历字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 11:59:45 24 4
gpt4 key购买 nike

我想创建一种方法,一次迭代一个字符的任何字符串(即一个单词长),并使用分隔符打印出新行上的每个字符。为此,我阅读了有关正则表达式的所有内容 ( this post helped me the most for learning them ),以及有关如何编译要在扫描器中使用的模式的 Java 文档 ( herehere )。学习完所有这些后,我创建了以下代码:

    public static void stringPrinter(String whole){
Pattern p = Pattern.compile(".{1}");
Scanner scan = new Scanner(whole);
scan.useDelimiter(p);
for (int i = 0; i < whole.length(); i++){
System.out.println(scan.next());
}
}

然后我用这一行对其进行了测试:

stringPrinter("okay");

现在在我看来,这应该按如下方式工作:

  • 它接受一个字符串并将其设置为变量名 whole .
  • 它编译一个保存到变量p的模式,由任意一个字符组成。
  • 它创建一个 Scanner 对象,设置为扫描字符串 whole .
  • 它将扫描仪的分隔符设置为该模式 p我们定义的(所以它会在找到每个字符后停止)。
  • 它将运行一个循环,该循环的运行次数与字符串 whole 中的字符完全相同。 .
  • 它将运行多次的语句找到一个字符,然后将其打印到控制台。

所以我希望输出“o”、“k”、“a”和“y”各占一行。

但它给出的实际输出是:

. 


Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at WholeNumber.stringPrinter(WholeNumber.java:37)
at WholeNumber.main(WholeNumber.java:28)
.

(除了没有这些句点。顶部只有三个空行,下面有一个空行。我添加了这些句点,以便此处显示空白)。

我认为堆栈跟踪与它额外迭代一次有关,但没有新字符。然而,即使我注释掉代码的倒数第二行(声明 for 循环的位置),我仍然得到以下输出:

 .

(只是一个空行)

有人可以帮我弄清楚发生了什么事吗?我真的不确定这个程序出了什么问题。感谢任何帮助,所以提前致谢!

P.S.是的,我检查了 this post在发布这个问题之前。它证实了我的印象:.应该检查任何字符和 {1}之后它应该确保它正在寻找恰好一个字符。

最佳答案

So could someone help me figure out what's going on?

当然。事前说明:分隔模式 ".{1}"相当于 "." (定义某个元素出现一次没有任何附加值)。

理解代码行为的关键是 Scanner 中的这些句子。文档:

The next() and hasNext() methods … first skip any input that matches the delimiter pattern, and then attempt to return the next token. …

Depending upon the type of delimiting pattern, empty tokens may be returned. … The delimiting pattern "\\s" could return empty tokens since it only passes one space at a time.

因此,由于分隔模式与任何字符匹配,因此 o 中的每个字符 ( k a y whole ) String 是分隔符,其间的三个空标记由 next() 返回。 .

要真正将每个字符作为标记,我们可以使用空分隔模式:.compile("") .

关于java - 使用正则表达式一次一个字符地遍历字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41030764/

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