尝试在Java中拆分字符串时为空字符?以及如何解决?

问题描述 投票:0回答:2

我正在尝试像这样拆分字符串:

stringNumbers = "12.34+345.56+45-87.90*43.00";
String[] Operators = stringNumbers.split("[0-9.]");

在控制台上,当我打印操作符时,我得到这个:

[, , , , , +, , , , , , +, , -, , , , , *]

空字符不是我想要的输出。为什么我会得到零用钱以及如何解决这个问题?

java regex string
2个回答
1
投票

这是因为您要分割一个字符,所以必须急于执行此操作:

String[] Operators = stringNumbers.split("[0-9.]*");

或者您可以过滤结果:

String[] Operators = Arrays.stream(stringNumbers.split("[0-9.]"))
    .filter(str -> !str.equals(""))
    .toArray(String[]::new);

0
投票
String stringNumbers = "12.34+345.56+45-87.90*43.00";
String[] Operators = Arrays.stream(stringNumbers.split("[0-9.]+"))
                .filter(str -> !str.equals(""))
                .toArray(String[]::new);

0
投票

另一种选择是只收集这些数字,并使用一个简单的表达式,例如:

\\d+(?:\\.\\d+)?

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class RegularExpression{

    public static void main(String[] args){

        final String regex = "\\d+(?:\\.\\d+)?";
        final String string = "12.34+345.56+45-87.90*43.00\n"
             + "12+345+45.8-87*43";

        final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
        final Matcher matcher = pattern.matcher(string);

        while (matcher.find()) {
            System.out.println("Full match: " + matcher.group(0));
            for (int i = 1; i <= matcher.groupCount(); i++) {
                System.out.println("Group " + i + ": " + matcher.group(i));
            }
        }

    }
}

输出

Full match: 12.34
Full match: 345.56
Full match: 45
Full match: 87.90
Full match: 43.00
Full match: 12
Full match: 345
Full match: 45.8
Full match: 87
Full match: 43

[如果您想简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果需要,您还可以在this link中查看它如何与某些示例输入匹配。


RegEx电路

[jex.im可视化正则表达式:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.