2016-11-10 6 views
1

Инструкции: Если задана строка, определите, является ли она целым числом. Например, строка «123» является целым числом, но строка «привет» не является.Пытается определить, является ли строка целым числом

Это целое число, если все символы в строке являются цифрами.

Возвращает true, если это целое число, или false, если это не так.

Подсказка: существует метод Character.isDigit(), который принимает символ в качестве аргумента и возвращает логическое значение.

То, что я до сих пор:

public boolean isInteger(String str) { 
    if(Character.isDigit(str.charAt(0)) == 0) { 
     return false; 
    } 
    for (int i = 0; i < str.length(); i++) { 
     if(Character.isDigit(str.charAt(i))) { 
      break; 
     } else { 
      return false; 
     } 
    } 
    return true; 
} 

Я возникли проблемы с возвратом логическое значение для строки «101» и никакой строки на всех (»«)

+0

'if (Character.isDigit (str.charAt (0)) == 0) { return false; } 'Это условие странно указано. Почему вы оцениваете 'boolean' и' int'? –

+0

Кроме того, вы должны удалить 'break;', отменить это первое условие и поместить в него 'return false''. –

+0

для "if (Character.isDigit (str.charAt (0)) == 0) {return false;}", я пытался сделать код возвратом false, если в строку ничего не было. Кроме того, я попытался отрицать первое условие, которое сделало логическую строку «101» правильной, но в итоге все неверные значения возвращались. –

ответ

5

Вы могли бы использовать регулярное выражение.

return str.matches("\\d+"); 

не работает для отрицательных чисел.

Вы также можете использовать Integer.parseInt и поймать NumberFormatException и соответственно вернуть true/false.

Или, вы не должны нарушать первую цифру вы найдете, как вам нужно, чтобы проверить все символы, только до тех пор, пока не найдете тот, который не цифра. Опять же, это не отражает отрицательные числа

public boolean isInteger(String str) { 
    if(str == null || str.trim().isEmpty()) { 
     return false; 
    } 
    for (int i = 0; i < str.length(); i++) { 
     if(!Character.isDigit(str.charAt(i))) { 
      return false; 
     } 
    } 
    return true; 
} 

Лично вариант 2 является лучшим, но ваши инструкции, кажется, подразумевает, что вам нужно перебрать символьные значения

2

Просто проверьте, если Integer.parseInt бросает исключение или не.

try { 
    Integer.parseInt(string); 
} catch (NumberFormatException e) { 
    return false; 
} 
return true; 
+0

Программа, которую я использую, является очень ограниченным компилятором с целью преподавания людей, как делать определенные методы Java в каждой главе. Он (к сожалению) не может использовать .parseInt, потому что текущий урок его не учит. –

0

Я предлагаю использовать регулярное выражение для определения целого числа.

Как это

public boolean isInteger(String str){ 
    Pattern p = Pattern.compile("[0-9]+"); 
    Matcher m = p.matcher(str); 
    boolean b = m.matches(); 
    return b; 
} 
+0

Итак ... просто 'str.matches (" [0-9] + ");'? –

+0

Ха-ха, да, это то же самое. Я просто копирую из примера API Java –

2

Вы близки, но смешались логику. Я пройду через это с тобой сейчас.

if(Character.isDigit(str.charAt(0)) == 0) { 
    return false; 
} 

Я не уверен, что это выше заявление, если хотите проверить. Я вижу, что вы проверяете, является ли индекс 0 цифрой, но затем вы сравниваете его с 0. Даже если это было написано правильно, этот оператор можно удалить, потому что вы собираетесь перебирать строку. После прочтения вашего комментария кажется, что он предназначен для проверки на null или пустую строку. В этом случае вы можете напрямую протестировать string.

if(str == null || str.isEmpty()) 
    return false; 

for (int i = 0; i < str.length(); i++) { 
    if(Character.isDigit(str.charAt(i))) { 
     break; 
    } 
    else { 
     return false; 
    } 
} 
return true; 

Приведенный выше break; не делать то, что я думаю, что вы думаете.break; выйдет из цикла for, таким образом, только проверит первый character. Я предлагаю переписать это if-else, чтобы избавиться от else и отрицать ваш метод isDigit. См. Мой код ниже.

for(int i = 0;i < str.length();i++){ 
    if(!Character.isDigit(str.charAt(i)) 
     return false; 
} 
return true; 

Вы хотите только return false если character не цифра.

+0

в логике проверки, должен обрабатывать дефис - для отрицательного значения (и плюс + для положительного) – kidnan1991

+0

@ kidnan1991 Я не верю, что OP беспокоится о '+' или '-'. Поскольку OP был направлен в направлении 'Character.isDigit()', '+' и '-', не являются цифрами и поэтому будет' возвращать false', если ввод –

+0

Я получил вашу точку. OP не заботится о знаке (- или +0). О вашем решении, это не правильно, если префикс пуст (OP хочет, чтобы он был ложным). Итак, во-первых, обрезать строку => Проверить размер перед любым процессом – kidnan1991

0

В Java, вы можете использовать это регулярное выражение: Он будет фильтровать или отрицательное, или положительное значение

private static final String NUMBER_REGEX = "(^\\d++)|(^[\\-]{1}\\d++)"; 
private static final Pattern NUMBER_PATTERN = Pattern.compile(NUMBER_REGEX); 
final Matcher matcher = NUMBER_PATTERN.matcher(inputString); 
if(matcher.find()) { 
// If matcher => parse the value 
final String sNumber = matcher.group(); 
final int value = Integer.parseInt(sNumber); 
} else { 
// Not matching 
} 
2

Все вышеизложенное решение кажется правильным для меня, но я хотел бы дать еще одно решение этой проблемы , Вы можете проверить это с помощью значения ASCII тоже:

private Boolean IsInteger(String str) 
{ 
    int length = str.length(),c=0; 
    if(length==0) 
     return false; 
    for(int i=0;i<length; i++) 
    { 
     c = (int)str.charAt(i)-48; 
     if(!(c>=0 && c<10)) 
     return false; 
    } 
    return true; 
} 

Я думаю, что Мое решение намного лучше, потому что используется меньшее количество библиотечных функций на итерации.

Я не проверяю отрицательные значения, потому что в вопросах, которые вы указали, что строка является целым, если все символы являются цифрами. Если вы хотите проверить отрицательные числа, вы можете сделать это, добавив одно условие в i == 0 ;.

+0

Голосуйте за обработку пустой строки, поскольку OP хотите – kidnan1991