我正在这里进行分配,其中一部分要求我从一个字符串解析整数,该字符串由任何其他字符分隔的数字组。我知道我可以使用包装器类方法Integer.parseInt(string)从只包含数字的字符串中解析int,但在这种情况下我该怎么做呢?到目前为止,我已经考虑过对字符串进行线性搜索并将变量分配给第一个索引,其中出现一个数字,最后一个数字后面的索引出现,并根据这些索引创建一个临时子字符串,从中解析int。这是一种有效的方法吗?也许有一个更有效率的?
答案 0 :(得分:5)
如果它可以是任何字符(一个或多个),那么这可能会有所帮助:
String[] aarray = str.split("[^\\d]+");
E.g:
String str = "12fdvvsd34.;h56s67.45c56";
String[] aarray = str.split("[^\\d]+");
for(int i = 0; i < aarray.length; i++)
System.out.println(Integer.parseInt(aarray[i]));
输出:
12
34
56
67
45
56
答案 1 :(得分:2)
让API完成工作,导致这个简单的单行:
int i = Integer.parseInt(input.replaceAll("\\D", ""));
说明:
replaceAll("\\D", "")
将所有非数字替换为空白,有效删除所有非数字,只留下数字字符Integer.parseInt()
答案 2 :(得分:0)
你可以使用java.util.String split方法如果你有一个带有由标记分隔的子串的String:
String data "123.345.55.66";
String [] fields = data.split(".");
如果那不是你想要的,你可以通过循环遍历字符串字符来扼杀细节:
for (int i = 0; i < data.size(); ++i) {
char c = data.charAt(i);
// manipulate as needed.
}
答案 3 :(得分:0)
试试这个:
Integer findNumber(String s){
List<String> num = Arrays.asList(s.split("[^0-9]"));
for(String n : num) if(!n.isEmpty()) return Integer.parseInt(n);
}
第一行将s
拆分为与非数字字符匹配的部分。
然后第二行找到List
中的第一个非空数字字符串。