我想从字符串中提取Number
,示例消息就像这样
您好您的帐号NO 295093491783已被17820扣除。如果您没有收到Ack电话9897123456。
现在我正在使用Google的Guava像这样
String temp = CharMatcher.JAVA_DIGIT.retainFrom(message);
我得到的结果如 295093491783178209897123456 ,我想要的格式是
String[] a = {"295093491783", "17820", "9897123456"}
任何帮助将不胜感激。我想用番石榴库来做这件事。
注意 : -
我不想使用正则表达式,因为CharMatcher
比正则表达式快。
我目前的解决方案几乎以 6000 tps (每秒事务数)运行。
答案 0 :(得分:1)
这可能对您有用:
static String[] getNumbers(String from) {
List<String> numbers = new ArrayList<>();
StringBuilder number = new StringBuilder();
for (int i = 0; i < from.length(); i++) {
char c = from.charAt(i);
if (Character.isDigit(c)) {
number.append(c);
} else if (number.length() > 0){
numbers.add(number.toString());
number.setLength(0);
}
}
if (number.length() > 0) {
numbers.add(number.toString());
}
return numbers.toArray(new String[numbers.size()]);
}
但你真的对正则表达式解决方案进行了基准测试吗?