2010-01-30 63 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"] 

,然後解析出字符串作爲整數(如果需要)。

相關問題