我有一个
形式的字符串String str = "124333 is the otp of candidate number 9912111242.
Please refer txn id 12323335465645 while referring blah blah.";
我在字符串数组中需要124333
,9912111242
和12323335465645
。我试过这个
while (Character.isDigit(sms.charAt(i)))
我觉得在每个角色上运行上述方法都是低效的。有没有办法可以获得所有数字的字符串数组?
答案 0 :(得分:9)
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(<your string here>);
while (m.find()) {
//m.group() contains the digits you want
}
您可以轻松构建包含您找到的每个匹配组的ArrayList
。
或者,正如其他建议的那样,您可以拆分非数字字符(\D
):
"blabla 123 blabla 345".split("\\D+")
请注意\
必须在Java中进行转义,因此需要\\
。
答案 1 :(得分:4)
这非常适合您的输入。
String str = "124333 is the otp of candidate number 9912111242. Please refer txn id 12323335465645 while referring blah blah.";
System.out.println(Arrays.toString(str.split("\\D+")));
输出:
[124333, 9912111242, 12323335465645]
\\D+
匹配一个或多个非数字字符。根据一个或多个非数字字符拆分输入将为您提供所需的输出。
答案 2 :(得分:3)
答案 3 :(得分:3)
Java 8风格:
long[] numbers = Pattern.compile("\\D+")
.splitAsStream(str)
.mapToLong(Long::parseLong)
.toArray();
啊如果你只需要一个String数组,那么你可以像其他答案所说的那样使用String.split。
答案 4 :(得分:1)
或者,你可以试试这个:
String str = "124333 is the otp of candidate number 9912111242. Please refer txn id 12323335465645 while referring blah blah.";
str = str.replaceAll("\\D+", ",");
System.out.println(Arrays.asList(str.split(",")));
\\D+
匹配一个或多个非数字
[124333, 9912111242, 12323335465645]
答案 5 :(得分:1)
我想到的第一件事是过滤和拆分,然后我意识到它可以通过
来完成 String[] result =str.split("\\D+");
\ D匹配任何非数字字符,+表示需要其中一个或多个,并且领先\逃避另一个\因为\ D将被解析为'转义字符D'无效