gpt4 book ai didi

Java 扫描器不会匹配方括号

转载 作者:行者123 更新时间:2023-11-30 03:24:17 26 4
gpt4 key购买 nike

我在使用 Java 中的扫描器解析类似 Python 的列表时遇到问题。由于某种原因,我在尝试检测方括号时似乎做错了一些事情。最让我困惑的是,输入中方括号的出现似乎以某种方式触发了不需要的行为。

Scanner scanner1 = new Scanner("a[");
assert(scanner1.hasNext("a\\[")); // Does not trigger assertion

Scanner scanner2 = new Scanner("[[0]]");
assert(scanner2.hasNext("\\[")); // Triggers assertion, but why?

Scanner scanner3 = new Scanner(" a[[[0]]");
assert(scanner3.hasNext("a\\[")); // Triggers assertion, but why?

这是使用

openjdk version "1.8.0_45"
OpenJDK Runtime Environment (build 1.8.0_45-b14)
OpenJDK 64-Bit Server VM (build 25.45-b02, mixed mode)

最佳答案

扫描仪

扫描仪确实将输入分割成标记,并用分隔符分割(很好的解释 http://www.tutorialspoint.com/java/util/java_util_scanner.htm ),默认情况下它是空格。由于您没有任何分隔字符,因此第一个标记是整个字符串,因此 hasNext 中的模式应该匹配整个字符串,而不仅仅是其中的一部分。

解决方案:您需要创建正确的正则表达式语法来匹配整个字符串

Scanner scanner1 = new Scanner("a[");
assert(scanner1.hasNext("a\\["));

Scanner scanner2 = new Scanner("[[0]]");
assert(scanner2.hasNext("\\[.*"));

Scanner scanner3 = new Scanner(" a[[[0]]");
assert(scanner3.hasNext("a\\[.*"));

另一种方法是使用findInLine

Scanner scanner2 = new Scanner("[[0]]");
String inline = scanner2.findInLine("\\[.*"));
assert(inline!=null);

关于Java 扫描器不会匹配方括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30640016/

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