是否可以在不使用繁琐的正则表达式的情况下从句子中的数字中删除多余的空格?
我做了这段代码,但是当我为大量输入文本执行代码时,似乎要花费很多时间。
String text = text.replaceAll("(?<=\\b(?<![.,/])[0-9]+) +(?=[0-9]+[$|€|£|¥|¥|%|°])", "");
text = text.replaceAll("(?<=\\b(?<![.,/])[0-9]+), +(?=[0-9]+[$|€|£|¥|¥|%|°])", ",");
text = text.replaceAll("(?<=\\b(?<![.,/])[0-9]+)\\. +(?=[0-9]+[$|€|£|¥|¥|%|°])", ".");
text = text.replaceAll("(?<=\\b(?<![.,/\\-//%€£¥¥°\\$])[0-9]+) +(?=[0-9]+\\s?\\b(?![.,/\\-//%€£¥¥°\\$]))", "");
text = text.replaceAll("(?<=\\b(?<![.,/\\-//%€£¥¥°\\$])[0-9]+), +(?=[0-9]+\\s?\\b(?![.,/\\-//%€£¥¥°\\$]))", ",");
text = text.replaceAll("(?<=\\b(?<![.,/\\-//%€£¥¥°\\$])[0-9]+)\\. +(?=[0-9]+\\s?\\b(?![.,/\\-//%€£¥¥°\\$]))", ".");
例如用于输入:
bla bla bla 12, 09 bata tata 11. 02
输出应为
bla bla bla 12,09 bata tata 11.02
注意如何删除小数点之间的空格。
答案 0 :(得分:3)
您可以这样做:
String str = "bla bla bla 12. 09 bata tata 11. 02";
System.out.println(str.replaceAll("(\\d+[\\.,])\\s+(\\d+)", "$1$2"));
输出:
bla bla bla 12.09 bata tata 11.02
关于使用的正则表达式:
它是任意数量的数字,后跟.
或,
,后跟任意空格,后跟任意数字。
我们在正则表达式中使用了分组。
答案 1 :(得分:0)
没有正则表达式的OR:
public static String deAlphaStringInput(String aStr) {
if (aStr != null) {
StringBuilder strTemp = new StringBuilder(aStr);
for (int i = 0; i < strTemp.length(); i++) {
if (!Character.isDigit(strTemp.charAt(i))) {
strTemp.deleteCharAt(i);
}
aStr = strTemp.toString();
}
}
return aStr;
}