说我有以下变量:
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);
我想这是因为这个数字有一个前导零。
答案 0 :(得分:3)
问题不在于前导零,请参阅:
int x = Integer.parseInt("0123");
System.out.println(x); // prints 123
问题是您的号码大于Integer.MAX_VALUE
。
如果我是你,我会将电话号码存储为字符串或自定义PhoneNumber
类,其中包含country code
,area code
,number
等字段等等。
更新:如果您的字符串仅由数字组成,您可以检查一个号码是否介于其他两个号码之间:< / 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);
}
}