java - 正则表达式在字符串的第一个索引处替换除减号“-”之外的所有无效字符
问题描述
我正在使用以下正则表达式替换十进制数字字符串中存在的所有无效字符:
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
解决方案
我建议使用两个步骤进行正则表达式。首先,从输入字符串中去除所有不相关的字符。然后,使用另一个正则表达式检查第一次替换后剩余的是否为有效数字:
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");
}
推荐阅读
- ios - 如何在关闭模式后重新加载表格视图
- java - 使用 ASM 时如何忽略检测 getter/setter?
- r - 在 R 中将 df 子集为 2、3 或更多条件
- r - R中的模拟最大似然,MaxLik
- javascript - Javascript onclick 调用错误的函数
- javascript - api 调用重新加载并刷新整个页面,而不仅仅是更新 div
- android - 如何将函数作为参数传递给目标片段 - Android 导航组件
- python - 如何在没有循环的情况下添加一个整数和另一个数字
- python-3.x - Pandas 标记位于两个不同列之间的列的所有行
- python - 如何将隐藏神经元添加到 Pytorch RNN