2013-07-08 29 views
1

說我有以下變量:手機串號爲int

String start = "02071231234"; 
String end = "02071231237"; 
List<String> numbersFromStartToEnd = new ArrayList<String>(); 

什麼是存儲的最佳方式: 「02071231234」, 「02071231235」, 「02071231236」,在numbersFromStartToEnd 「02071231237」。

我試圖改變Stringint並希望使用一個循環來創建一個字符串列表:

int startInt = Integer.parseInt(start); 

,但我發現

java.lang.NumberFormatException: For input string: "02885449730" 

我想這是因爲數量已領先的零。

+1

不,那是因爲這個數字是一個'Integer'太大。 – iamnotmaynard

+0

@Nambari:不,Integer.parseInt(「0123」)'返回123沒有問題。 – jlordo

+0

如果它太大瞭解析,請嘗試Long.parseLong(...) – Kon

回答

0

我不確定任何迴應是否是實際的解決方案。我創建的一小段代碼,讓你正在尋找的結果(["02071231234", "02071231235", "02071231236", "02071231237"]):

public static void main(String[] args) { 
    String start = "02071231234"; 
    String end = "02071231237"; 
    String leadingZeros = ""; 
    List<String> numbersFromStartToEnd = new ArrayList<String>(); 

    // get leading zeros (makes the assumption that all numbers will have same qty of leading zeros) 
    for(char digit : start.toCharArray()) { 
     if(digit != '0') { break; } 
     leadingZeros += "0"; 
    } 

    // set up your BigInts 
    BigInteger s = new BigInteger(start); 
    BigInteger e = new BigInteger(end); 
    BigInteger one = new BigInteger("1"); 

    // collect all numbers from start to end (adding on any leading zeros) 
    while (s.compareTo(e) <= 0) { 
     numbersFromStartToEnd.add(leadingZeros + s.toString()); 
     s = s.add(one); 
    } 

    // print the result 
    for(String string: numbersFromStartToEnd) { 
     System.out.println(string); 
    } 
} 
+0

嗯我同意..所有的答案幫助我。但我想你的一個實際上回答我想要的。謝謝 – obsessiveCookie

3

這個問題不前導零,請參閱:

int x = Integer.parseInt("0123"); 
System.out.println(x); // prints 123 

的問題是,你的數量比Integer.MAX_VALUE更大。

如果我是你,我會存儲的電話號碼可以是字符串,或自定義PhoneNumber類像country codearea codenumber等領域。


更新:這裏是你如何檢查是否一個是另外兩個數字之間,前提是你的字符串只有由數字:

String start = "02071231234"; 
    String end  = "02071231237"; 
    String toCheck = "02071231235"; 
    if (start.compareTo(toCheck) < 0 && end.compareTo(toCheck) > 0) { 
     System.out.println("toCheck is between start and end"); 
    } else { 
     System.out.println("toCheck is NOT between start and end"); 
    } 
+0

哦的錯誤數據結構。所以我該如何去獲取變量之間的數字:「start」和「end」 – obsessiveCookie

+0

@obsessiveCookie:只要你的電話號碼字符串除了數字之外什麼都沒有,你可以使用'String'的'compareTo()'方法。 – jlordo

+0

對不起。 compareTo()如何幫助獲取之間的數字?請舉例 – obsessiveCookie

0

問題是你的號碼是大於最大可能的整數值

Integer.MAX_VALUE = 2147483647 

使用BigInteger這樣

BigInteger myBigInt = new BigInteger("my String"); 

然後,你可以仍然只是做myBigInt + 1獲得下一個

或者如果你修剪前導零,你應該能夠爲你的電話號碼不使用Integer只要go above Integer.MAX_VALUE