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