2011-12-11 100 views
2

我正在进行赋值,其中的一部分要求我从一个由其他任何字符分隔的数字组中解析整数。我知道我可以使用包装类方法Integer.parseInt(string)从包含数字的字符串解析int,但在这种情况下我该如何去做呢?到目前为止,我已经考虑过对字符串进行线性搜索,并为出现数字的第一个索引和最后一位数字后面的索引分配一个变量,并根据解析int的这些索引创建一个临时子字符串。这是一种有效的方法吗?也许有更高效的一个?如何解析字符串中的多位数整数

+0

你的问题还不清楚。请显示您需要解析的输入示例,即'Integer.parseInt()'_can't_ parse。 –

+0

E.G. 23dfasf22323dfddfa223 应解析23,22323和223 – awfulwaffle

回答

5

如果它可以是任何字符(一个或多个),那么这可能会有所帮助:

String[] aarray = str.split("[^\\d]+"); 

如:

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 
+0

哦,这正是我需要的。不知道string.split可能会将正则表达式作为参数。谢谢一堆! 编辑:几乎我所需要的,我需要一个整数数组,而不是字符串。无论如何,我想我可以从这里处理它。再次感谢! – awfulwaffle

0

您可以将java.util.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. 
} 
+0

第二个本质上是我正在考虑的。 理论上讲,如果我要使用string.replaceAll(“[^ 0-9]”,“。”),然后使用你的建议为split方法,我可以这样做,对?如果数字中有多个非数字字符,这会工作吗?例如,如果我试图分割123.2223 ... 33.3以尝试获得123,2223,33和3? – awfulwaffle

2

让API做的工作,导致这种简单的一行:

int i = Integer.parseInt(input.replaceAll("\\D", "")); 

说明:

  • replaceAll("\\D", "")取代所有非d

    Integer findNumber(String s){ 
    List<String> num = Arrays.asList(s.split("[^0-9]")); 
    for(String n : num) if(!n.isEmpty()) return Integer.parseInt(n); 
    } 
    

    第一行拆分:与空白,它有效地消除所有非数字,让你只用数字字符

  • 结果传递(只是位数)为Integer.parseInt()
0

试试这个igits s围绕与非数字字符匹配的部分。

第二行然后在List中找到第一个非空数字串。