将数字提取到字符串数组中

时间:2015-01-21 08:30:31

标签: java arrays regex string

我有一个

形式的字符串
String str = "124333 is the otp of candidate number 9912111242. 
         Please refer txn id 12323335465645 while referring blah blah.";

我在字符串数组中需要124333991211124212323335465645。我试过这个

while (Character.isDigit(sms.charAt(i))) 

我觉得在每个角色上运行上述方法都是低效的。有没有办法可以获得所有数字的字符串数组?

6 个答案:

答案 0 :(得分:9)

使用正则表达式(请参阅Patternmatcher):

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)

您可以使用String.split()

String[] nbs = str.split("[^0-9]+");

这将在任何一组非数字数字上拆分String

答案 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'无效