Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 电话号码字符串为int_Java_String_Integer_Range - Fatal编程技术网

Java 电话号码字符串为int

Java 电话号码字符串为int,java,string,integer,range,Java,String,Integer,Range,假设我有以下变量: String start = "02071231234"; String end = "02071231237"; List<String> numbersFromStartToEnd = new ArrayList<String>(); 但是我越来越 java.lang.NumberFormatException: For input string: "02885449730" 我猜这是因为数字有一个前导零。问题不在于前导零,请参阅: int

假设我有以下变量:

String start = "02071231234"; 
String end = "02071231237"; 
List<String> numbersFromStartToEnd = new ArrayList<String>();
但是我越来越

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

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

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

int x = Integer.parseInt("0123");
System.out.println(x); // prints 123
问题是您的数字大于
整数.MAX\u值

如果我是你,我会将电话号码存储为字符串或自定义的
电话号码
类,其中包含
国家代码
区号
号码
等字段


更新:如果字符串仅由数字组成,您可以通过以下方式检查一个数字是否介于其他两个数字之间:

    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");
    }
String start=“02071234”;
字符串end=“02071237”;
字符串toCheck=“02071235”;
if(start.compareTo(toCheck)<0&&end.compareTo(toCheck)>0){
System.out.println(“toCheck在开始和结束之间”);
}否则{
System.out.println(“toCheck不在开始和结束之间”);
}

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

Integer.MAX_VALUE = 2147483647
像这样使用
biginger

BigInteger myBigInt = new BigInteger("my String");
然后您仍然可以执行
myBigInt+1
来获取下一个


或者,如果您确实修剪前导零,您应该能够使用
整数
,只要您的数字不超过
整数。最大值

我不确定任何响应是否是实际的解决方案。我创建了一小段代码,它给出了您要查找的结果(
[“02071231234”、“02071235”、“02071236”、“02071237”)

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);
    }
}
publicstaticvoidmain(字符串[]args){
字符串start=“02071231234”;
字符串end=“02071237”;
字符串前导零=”;
列表编号FromStartToEnd=新建ArrayList();
//获取前导零(假设所有数字的前导零数量相同)
for(字符位数:start.toCharArray()){
如果(数字!=“0”){break;}
引线零+=“0”;
}
//设置您的BIGINT
BigInteger s=新的BigInteger(开始);
BigInteger e=新的BigInteger(结束);
BigInteger one=新的BigInteger(“1”);
//从开始到结束收集所有数字(添加任何前导零)

(s.compareTo(e)No,这是因为该数字对于
整数来说太大了。
@Nambari:No,
整数.parseInt(“0123”)
返回
123
,没有问题。如果它太大而无法解析,请尝试Long.parseLong(…)@jlordo:正确,我的错误,我想使用带转义文字的前导0还有另一个问题(将其视为八进制)。我感到困惑。很可能有更好的方法来解决这个问题。将电话号码存储为
int
(或
long
或任何数字)会引起奇怪的错误。哦。那么,我如何在变量之间获取数字:“开始”和“结束”@OccessiveCookie:只要你的电话号码字符串中除了数字以外什么都不包含,你就可以使用
String
compareTo()
方法。对不起,你会如何比较()帮我把数字排在中间?请给出example@obsessiveCookie:与使用
int
@OccessiveCookie的方法几乎相同:我想现在我理解了你的问题。这无助于你生成你要查找的字符串/数字,它只会验证它们。你仍然在自己生成它们。嗯,我同意..所有这些都没有他回答了我的问题。但我想你的答案确实满足了我的要求。谢谢
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);
    }
}