2013-07-08 4 views
1

Say У меня есть следующие переменные:Номер телефона Строка Int

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

Какой самый лучший способ для хранения: "02071231234", "02071231235", "02071231236", "02071231237" в numbersFromStartToEnd.

Я попытался изменить String к int и надеялся использовать цикл для создания списка строк:

int startInt = Integer.parseInt(start); 

, но я получаю

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

Я думаю, это потому, что число имеет начальный ноль.

+1

Нет, это потому, что число слишком велико для 'Integer'. – iamnotmaynard

+0

@Nambari: Нет, 'Integer.parseInt ("")' возвращает '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 code, area code, number и так далее.


Update: Вот как вы можете проверить, если один номер между двумя другими номерами, при условии, что ваши строки только состоят из цифр:

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

oh.так как я могу получить цифры между переменными: «start» и «end» – obsessiveCookie

+0

@obsessiveCookie: до тех пор, пока строки вашего номера телефона не содержат ничего, кроме цифр, вы можете использовать метод 'compareTo()' 'String' , – jlordo

+0

Извините. Как бы compareTo() помочь получить числа между ними? Пожалуйста, дайте пример – obsessiveCookie

0

Проблема ваш номер больше максимально возможного целочисленного значения

Integer.MAX_VALUE = 2147483647 

Используйте BigInteger как этот

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

Тогда вы можете просто сделать myBigInt + 1, чтобы получить следующий

или если вы подрезать ведущий нуль вы должны быть в состоянии использовать Integer, пока ваш номер не выше Integer.MAX_VALUE

Смежные вопросы