【问题标题】:Empty result when string splited using pattern使用模式拆分字符串时的空结果
【发布时间】:2019-03-10 18:26:42
【问题描述】:

我有以下代码:

String generalRequest = "4+6*12/3";
String[] operatorsLine = generalRequest.split("[0-9]+");

结果,我在operatorsLine 中有剩余的空值:

""、"+"、"*"、"/"

但我渴望一个结果:

“+”、“*”、“/”


如何跳过将"" 值添加到数组中,使用String.split() 方法?

【问题讨论】:

  • 你想要的结果是什么?
  • @Ghanima "+"、"*"、"/"

标签: java regex java-8 functional-programming java-stream


【解决方案1】:

你可以使用类似的东西:

String[] operatorsLine = Arrays.stream(generalRequest.split("[0-9]+"))
                               .filter(s -> !s.isEmpty())
                               .toArray(String[]::new);

【讨论】:

【解决方案2】:

在这种情况下,您只需要单字符运算符,
从字符串中删除所有数字并用空字符串作为分隔符分割将起作用:

String generalRequest = "4+6*12/3";
String[] operatorsLine = generalRequest.replaceAll("\\d", "").split("");
System.out.println(Arrays.toString(operatorsLine));

打印出来:

[+, *, /]

【讨论】:

    【解决方案3】:

    如何将第二个参数提供给split(String regex, int limit) 方法并使用 2 个输出字段限制它并再次拆分它:

    String generalRequest = "4+6*12/3";
    String[] operatorsLine = (generalRequest.split("\\d+", 2)[1]).split("\\d+");
    

    第一次拆分会输出一个数组:["", "+6*12/3"],然后取第一个索引,用同样的 Regex 再次拆分。

    operatorsLine 的最终值为[+,*,/]

    【讨论】:

      猜你喜欢
      • 2023-02-10
      • 2012-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-28
      • 1970-01-01
      • 2015-08-30
      • 2014-10-14
      相关资源
      最近更新 更多