电话号码字符串到int

时间:2013-07-08 20:49:51

标签: java string integer range

说我有以下变量:

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

最佳存储方式是什么:{0}中的“02071231234”,“02071231235”,“02071231236”,“02071231237”。

我尝试将numbersFromStartToEnd更改为String,并希望使用循环来创建字符串列表:

int

但我正在

int startInt = Integer.parseInt(start);

我想这是因为这个数字有一个前导零。

3 个答案:

答案 0 :(得分:3)

问题不在于前导零,请参阅:

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

问题是您的号码大于Integer.MAX_VALUE

如果我是你,我会将电话号码存储为字符串或自定义PhoneNumber类,其中包含country codearea codenumber等字段等等。


更新:如果您的字符串由数字组成,您可以检查一个号码是否介于其他两个号码之间:< / p>

    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");
    }

答案 1 :(得分:0)

问题是您的数字大于最大可能的整数值

Integer.MAX_VALUE = 2147483647

使用BigInteger这样的

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

然后你仍然可以myBigInt + 1来获得下一个

或者如果您确实修剪了前导零,只要您的号码不超过Integer

,您就可以使用Integer.MAX_VALUE

答案 2 :(得分: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);
    }
}