2010-01-30 62 views
5

用户可能希望按照自己的意愿划分数字。从字符串中提取所有(自然)数字的最有效方法

什么是最有效的(或一个简单的标准功能)从字符串中提取所有的(自然)号码?

+0

请注意,“自然数”是不明确定义的(请参阅http://en.wikipedia.org/wiki/Natural_number)。另外,您希望允许的数字大小是否有最大限制,或者它们可以是任何大小? – 2010-01-30 21:23:21

回答

6

您可以使用正则表达式。我修改本实施例中从Sun's regex matcher tutorial

import java.util.regex.Pattern; 
import java.util.regex.Matcher; 

public class Test { 

    private static final String REGEX = "\\d+"; 
    private static final String INPUT = "dog dog 1342 dog doggie 2321 dogg"; 

    public static void main(String[] args) { 
     Pattern p = Pattern.compile(REGEX); 
     Matcher m = p.matcher(INPUT); // get a matcher object 
     while(m.find()) { 
      System.out.println("start(): "+m.start()); 
      System.out.println("end(): "+m.end()); 
     } 
    } 
} 

它发现每个数字的开始和结束索引。正则表达式\d+允许以0开头的数字,但如果需要,可以轻松更改。

0

如果你知道的分隔符,则:

String X = "12,34,56"; 
String[] y = X.split(","); // d=delimiter 
int[] z = new int[y.length]; 
for (int i = 0; i < y.length; i++) 
{ 
    z[i] = java.lang.Integer.valueOf(y[i]).intValue(); 
} 

如果不这样做,你可能需要预处理 - 你可以做​​与空间和利用空间的分隔符来替换所有字符。

希望帮助 - 我不认为有一个内置的功能。

2

我不确定我完全理解你的问题。但是,如果你想要的是退出所有非负整数这样,就可以很好地漂亮:

String foo = "12,34,56.0567 junk 6745 some - stuff tab tab 789"; 
String[] nums = foo.split("\\D+"); 

// nums = ["12", "34", "56", "0567", "6745", "789"] 

,然后解析出字符串作为整数(如果需要)。

相关问题