use*_*011 21 java string algorithm
例如,我输入了字符串:" 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<Integer> digits = new ArrayList<Integer>();
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但经过仔细检查后,我忽略了几点:
一些代码行重复两次.
我用List.我认为这不是一个好主意,更好地使用数组.
所以你怎么看?
你能提供一些建议吗?
Max*_*tin 55
使用RepalceAll
String str = "qwerty1qwerty2";
str = str.replaceAll("[^0-9]+", " ");
System.out.println(Arrays.asList(str.trim().split(" ")));
Run Code Online (Sandbox Code Playgroud)
输出:
[1, 2]
Run Code Online (Sandbox Code Playgroud)
[编辑]
如果要包含-ae减号,请添加-?:
String str = "qwerty-1qwerty-2 455 f0gfg 4";
str = str.replaceAll("[^-?0-9]+", " ");
System.out.println(Arrays.asList(str.trim().split(" ")));
Run Code Online (Sandbox Code Playgroud)
输出:
[-1, -2, 455, 0, 4]
Run Code Online (Sandbox Code Playgroud)
描述
[^-?0-9]+
Run Code Online (Sandbox Code Playgroud)
+ 在一次和无限次之间,尽可能多次,根据需要回馈-? 其中一个字符" - ?"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();
}
Run Code Online (Sandbox Code Playgroud)
是一种正则表达式解决方案。
| 归档时间: |
|
| 查看次数: |
80353 次 |
| 最近记录: |