【问题标题】:Match a word from beginning of line in Java从Java中的行首匹配一个单词
【发布时间】:2019-02-16 22:35:25
【问题描述】:

我有以下命令输出:

NAME         PLATFORM   STATUS
----         --         ------
XAB           Windows    Yes
ABB          Windows    Yes
AB           Windows    No
ABAB        Windows    Yes

其中名称列具有唯一字符串。

我想查明名称列中是否存在输入字符串,使其与输入完全匹配。例如如果我在搜索 A 或 B,它会返回 false,AB 会返回 true。

我尝试过以下返回 false 的操作:

Arrays.stream(str.split("\n"))
            .filter(line -> line.matches("^AB "))
            .findFirst()
            .isPresent()

string.contains() 似乎不合适,因为它不会进行严格的模式检查。

你们能建议一个使用流的合适的单行解决方案吗?谢谢。

【问题讨论】:

  • .filter(line -> line.matches("AB .*"))
  • 为什么不.filter(line -> line.startsWith("AB"))line.startsWith("AB ")??
  • @WiktorStribiżew 因为line.startsWith("A") 也将匹配,而且似乎 OP 不匹配
  • .startsWith() 也将匹配 ABAB。我不想那样。
  • 感谢@anubhava line.matches("AB .*") 工作。

标签: java regex


【解决方案1】:

要检查一行是否以某个值开头,您可以使用String#startsWith

line.startsWith("AB ")

或者,如果您打算使用正则表达式,请使用 .matches 记住它必须匹配整行(因此,添加 .* 是必要的,因为它将匹配除换行符之外的任何 0+ 字符尽可能):

line.matches("AB .*")

【讨论】:

    猜你喜欢
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    相关资源
    最近更新 更多