【问题标题】:Single Digits From String In Java RegexJava正则表达式中字符串的单个数字
【发布时间】:2020-06-17 16:38:32
【问题描述】:

给定一个字符串

1 3 2 1 9 1 bla 3 4 3

我发现了

/b[1-4]/b 

将仅返回数字 1 2 3 4,如 this 所示,但 String[] input = args[0].split("\b[1-4]\b"); 不返回

{"1","3","2","1","1","3","4","3"}

【问题讨论】:

  • 那么1 3 23 1 9 1 bla92 3 4 3应该产生什么?
  • "1 3 1 1 3 4 3"
  • 只匹配"\\b[1-4]\\b"
  • @WiktorStribiżew - 我从您的帖子中学到了很多关于正则表达式模式的知识。只是好奇[1-4] 是否还不够?如果没有,如果我只使用[1-4] 会出现什么问题?
  • @ArvindKumarAvinash 抱歉,我刚刚使用了 OP 模式,但修复了反斜杠问题。 OP 似乎使用\b[1-4]\b 正则表达式来匹配1234 作为整个单词,即仅当它们未包含其他数字、字母或下划线时。不知道这是否真的是 OP 需要的。有一件事是肯定的:String#splitMatcher#find 的工作方式不同,这是主要问题。

标签: java regex split


【解决方案1】:

我假设您只需要 1 到 4 之间的数字。简单的拆分是不够的。一种方法可能是这样的:

String str = "1 3 2 1 9 1 bla 3 4 3";
String[] splitAndFilter = Pattern.compile("\\s+")
                                 .splitAsStream(str)
                                 .filter(s -> s.matches("[1-4]"))
                                 .toArray(String[]::new);
System.out.println(Arrays.toString(splitAndFilter));

【讨论】:

  • 我想这可以很好地从 bla-4-bla 这样的文本中删除不需要的子模式(如果这样的事情会发生的话)
【解决方案2】:

您当前方法的问题是您试图根据数字本身进行拆分。这不会给出预期的结果,因为您拆分的结果会被消耗(阅读:删除),而留下其他所有内容。相反,请尝试在[^1-4]+ 上拆分:

String input = "1 3 2 1 9 1 bla 3 4 3";
String[] parts = input.split("[^1-4]+");
System.out.println(Arrays.toString(parts));

打印出来:

[1, 3, 2, 1, 1, 3, 4, 3]

这将拆分为一个或多个非 1-4 字符。这恰好适用于您的输入字符串,因为空格是分隔符,并且应该删除不匹配的数字和单词。

【讨论】:

  • @JvdV 很好。我进行了编辑,假设存在的数字始终为 0-9,它应该可以工作。
  • 这是一个相当危险的假设,但话又说回来,没有什么可以证明的 =)
【解决方案3】:

您可以只使用[1-4] 作为正则表达式。

import java.util.Arrays;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;

class Main {
    public static void main(String[] args) {
        String[] matches = Pattern.compile("[1-4]")
                .matcher(args[0])
                .results()
                .map(MatchResult::group)
                .toArray(String[]::new);
        System.out.println(Arrays.toString(matches));
    }
}

输出:

[1, 3, 2, 1, 1, 3, 4, 3]

命令行参数是"1 3 2 1 9 1 bla 3 4 3"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多