Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数字提取到字符串数组中_Java_Arrays_Regex_String - Fatal编程技术网

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

Java 将数字提取到字符串数组中,java,arrays,regex,string,Java,Arrays,Regex,String,我有一个字符串,它的形式是 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))) 我觉得在每

我有一个字符串,它的形式是

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))) 
我觉得在每个角色上运行上述方法是低效的。有没有办法得到所有数字的字符串数组

使用正则表达式(请参见和):


请注意,
\
必须在Java中转义,因此需要
\

或者,您可以尝试以下方法:

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+
匹配一个或多个非数字

输出
这非常适合你的输入

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+
匹配一个或多个非数字字符。根据一个或多个非数字字符拆分输入将获得所需的输出。

您可以使用:

这将在任何一组非数字数字上拆分
字符串。

Java 8样式:

long[] numbers = Pattern.compile("\\D+")
                        .splitAsStream(str)
                        .mapToLong(Long::parseLong)
                        .toArray();

啊,如果你只需要一个字符串数组,那么你可以像其他答案所建议的那样使用String.split。

我想到的第一件事是过滤和拆分,然后我意识到可以通过

String[]result=str.split(\\D+)


\D匹配任何非数字字符,+表示需要其中一个或多个字符,而前导字符将转义另一个字符,因为\D将被解析为无效的“转义字符D”

@user1051505
\D
[^0-9]
BTW,所以
[^0-9]+
就是
\D+
(您需要避开反斜杠,以
\\D+
结束。
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]
String[] nbs = str.split("[^0-9]+");
long[] numbers = Pattern.compile("\\D+")
                        .splitAsStream(str)
                        .mapToLong(Long::parseLong)
                        .toArray();