Java 正则表达式替换除减号“以外的所有无效字符-&引用;在字符串的第一个索引处

Java 正则表达式替换除减号“以外的所有无效字符-&引用;在字符串的第一个索引处,java,regex,Java,Regex,我使用以下正则表达式替换十进制数字字符串中存在的所有无效字符: final String REGEX_REPLACE_INVALID_DECIMAL_NUMBER_CHARACTERS = "\\D*(\\d+\\.?\\d*)\\D*"; 这是我的测试代码: String[] inputs = { "0a", // -> 0 "a0a.0", // -> 0.0 "b0a.t1c", // -> 0.1

我使用以下正则表达式替换十进制数字字符串中存在的所有无效字符:

final String REGEX_REPLACE_INVALID_DECIMAL_NUMBER_CHARACTERS = "\\D*(\\d+\\.?\\d*)\\D*";
这是我的测试代码:

    String[] inputs = {
        "0a", // -> 0
        "a0a.0", // -> 0.0
        "b0a.t1c", // -> 0.1
        "-a0b.c1d", // -> -0.1
        "-#0.t12[3]", // -> -0.123
        "-123.[1]2_3", // -> -123.123
    };

    final String REPLACE_INVALID_DECIMAL_NUMBER_CHARACTERS = "\\D*(\\d+\\.?\\d*)\\D*";
    for (String input : inputs) {
        String replaceInvalidDecimalNumberCharacters = input.replaceAll(REPLACE_INVALID_DECIMAL_NUMBER_CHARACTERS, "$1");
        System.out.println("input: " + input +
                "\n\treplaceInvalidDecimalNumberCharacters: " + replaceInvalidDecimalNumberCharacters);
    }
当前,我的正则表达式将替换所有无效字符,甚至在字符串的第一个索引处替换小数点和减号

如何排除删除减号和小数点

这是我的测试输出:

input: 0a   replaceInvalidDecimalNumberCharacters: 0
input: a0a.0    replaceInvalidDecimalNumberCharacters: 00
input: b0a.t1c  replaceInvalidDecimalNumberCharacters: 01
input: -a0b.c1d replaceInvalidDecimalNumberCharacters: 01
input: -#0.t12[3]   replaceInvalidDecimalNumberCharacters: 0.123
input: -123.[1]2_3  replaceInvalidDecimalNumberCharacters: 123.123

我建议使用两个步骤继续使用regex。首先,从输入字符串中去掉所有不相关的字符。然后,使用另一个正则表达式检查第一次替换后剩余的数字是否有效:

String input = "-123.[1]2_3";
input = input.replaceAll("[^0-9.-]+", "");
if (input.matches("-?\\d+(?:\\.\\d+)?")) {
    System.out.println("Found a valid number: " + input);
}
else {
    System.out.println("Input is invalid");
}

我建议使用两个步骤继续使用regex。首先,从输入字符串中去掉所有不相关的字符。然后,使用另一个正则表达式检查第一次替换后剩余的数字是否有效:

String input = "-123.[1]2_3";
input = input.replaceAll("[^0-9.-]+", "");
if (input.matches("-?\\d+(?:\\.\\d+)?")) {
    System.out.println("Found a valid number: " + input);
}
else {
    System.out.println("Input is invalid");
}

如果字符串中没有多个点,并且像示例中一样,
-
仅放在字符串的开头,则可以使用
[^\d\n.-]+
将其替换为空字符串以获得所需的字符串。如果字符串中没有多个点,并且像示例中一样,
-
仅放在字符串的开头,则可以使用
[^\d\n.-]+
将其替换为空字符串以获得所需的字符串。