Java:扫描字符串中的模式

标签 java java.util.scanner

这可能是一个 quicky。为什么此代码不返回任何内容?

import java.util.Scanner;

public class MainClass {

public static void main(String[] args) {
    try {

        Scanner sc = new Scanner("asda ASA adad");
        String pattern = "[A-Z]+";

        while ((sc.hasNext(pattern))) {

            System.out.println(sc.next(pattern));
        }
        sc.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

最佳答案

hasNext(String pattern)仅当下一个标记与模式匹配时才返回 true。在您的情况下,"asda" 是下一个标记,它与 "[A-Z]+" 不匹配。文档很清楚,“[the] 扫描仪不会前进超过任何输入”。

如果您将模式更改为 [A-Za-z]+",那么您将获得三个 token ,这可能正是您想要的。

如果实际上您只想获取匹配[A-Z]+"的 token ,那么您可以执行以下任一操作:

  • 简单地丢弃不匹配的标记
  • useDelimiter("[^A-Z]+"),然后简单地调用 next()
  • 使用 skip("[^A-Z]+")
  • 使用 findInLine([A-Z]+")

提示:如果性能很重要,您会希望使用这些方法的预编译 Pattern 重载。

提示:请记住,"Xooo ABC" 有两个 "[A-Z]+" 匹配项。如果这不是您想要的,那么正则表达式必须更复杂一些。或者您始终可以简单地丢弃不匹配的标记。

关于Java:扫描字符串中的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2390500/

相关文章:

java - spring mvc 中预加载对象的 application_start 事件?

java - 如何将byte[]图像渲染到JSP?

Java Scanner 为什么我的代码中的 nextLine() 被跳过?

java - 在 Java 中扫描文本文件时使用对象

java - Play Framework 反向路由

java - 无需浏览器即可打开并监视运行 Flash 应用程序的窗口

Java 类加载器安全处理

java - 如何将 String 类型的用户输入添加到 Java 中的 ArrayList?

java.util.Scanner 在读取大文件时出现故障

java.util.scanner - 在由关闭流初始化的 Scanner 上调用 next() 不会抛出 IllegalStateException