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();