查找字符串中的所有数字
例如,我输入了字符串:“ qwerty1qwerty2 ”;
作为输出我想[1,2] 。
我目前的实施如下:
import java.util.ArrayList; import java.util.List; public class Test1 { public static void main(String[] args) { String inputString = args[0]; String digitStr = ""; List digits = new ArrayList(); for (int i = 0; i < inputString.length(); i++) { if (Character.isDigit(inputString.charAt(i))) { digitStr += inputString.charAt(i); } else { if (!digitStr.isEmpty()) { digits.add(Integer.parseInt(digitStr)); digitStr = ""; } } } if (!digitStr.isEmpty()) { digits.add(Integer.parseInt(digitStr)); digitStr = ""; } for (Integer i : digits) { System.out.println(i); } } }
但经过仔细检查后,我忽略了几点:
-
一些代码行重复两次。
-
我用List。 我认为这不是一个好主意,更好地使用数组。
所以你怎么看?
你能提供什么建议吗?
使用RepalceAll
String str = "qwerty1qwerty2"; str = str.replaceAll("[^0-9]+", " "); System.out.println(Arrays.asList(str.trim().split(" ")));
输出:
[1, 2]
[编辑]
如果你想包括-
ae减去,添加-?
:
String str = "qwerty-1qwerty-2 455 f0gfg 4"; str = str.replaceAll("[^-?0-9]+", " "); System.out.println(Arrays.asList(str.trim().split(" ")));
输出:
[-1, -2, 455, 0, 4]
描述
[^-?0-9]+
-
+
在一次和无限次之间,尽可能多次,根据需要回馈 -
-?
其中一个字符“ – ?” -
0-9
“0”和“9”之间范围内的字符
import java.util.regex.Matcher; import java.util.regex.Pattern; ... Pattern pattern = Pattern.compile("[0-9]+"); Matcher matcher = pattern.matcher("test1string1337thingie"); // Find all matches while (matcher.find()) { // Get the matching string String match = matcher.group(); }
是一个正则表达式解决方案。
试试这段代码
String s = "qwerty1qwerty2"; for(int i=0;i