Java 如何在没有正则表达式的情况下从字符串中提取数字
我想从字符串中提取Java 如何在没有正则表达式的情况下从字符串中提取数字,java,arrays,string,parsing,guava,Java,Arrays,String,Parsing,Guava,我想从字符串中提取Numbers,示例消息如下 您好,您的账号295093491783已扣除17820。如果您没有收到确认电话9897123456 现在我用的是谷歌的番石榴 String temp = CharMatcher.JAVA_DIGIT.retainFrom(message); 我得到的结果类似于295093491783178209897123456,我想要的格式是 String[] a = {"295093491783", "17820", "9897123456"} 任何帮助都
Number
s,示例消息如下
您好,您的账号295093491783已扣除17820。如果您没有收到确认电话9897123456
现在我用的是谷歌的番石榴
String temp = CharMatcher.JAVA_DIGIT.retainFrom(message);
我得到的结果类似于295093491783178209897123456,我想要的格式是
String[] a = {"295093491783", "17820", "9897123456"}
任何帮助都将不胜感激。我想用番石榴图书馆来做这件事
注意:-
CharMatcher
比正则表达式快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()]);
}
static String[]getNumbers(字符串来自){
列表编号=新的ArrayList();
StringBuilder编号=新的StringBuilder();
for(int i=0;i0){
number.add(number.toString());
number.setLength(0);
}
}
如果(number.length()>0){
number.add(number.toString());
}
返回numbers.toArray(新字符串[numbers.size()]);
}
但您是否确实对regex解决方案进行了基准测试?您每秒需要处理多少个?目前我的解决方案几乎以6000 TPS(每秒事务数)运行@PrakharNigam您是否能够对regex和matcher解决方案进行基准测试?@nullpointer尚未进行基准测试。。。仍然要继续。到目前为止,我还没有对正则表达式解决方案进行基准测试。@PrakharNigam让我知道结果,因为您的输入非常小,所以不使用正则表达式似乎是一个微小的优化。@KarolDowbecki实际上这是一条消息的单个片段。我的实际消息可以是多部分的,最少3个片段,最多256个片段。我正在比较这两种解决方案,我将很快分享这两种解决方案的得分