Проверка каждого символа на номер - PullRequest
3 голосов
/ 05 октября 2011

Я пытаюсь перебрать строку и проверить каждый символ, является ли один из символов числом. Если это число, я хочу вернуть его как true. У меня есть строка «crash», хотя она возвращает ее как true (что у нее есть номер).

Вот что у меня есть:

public boolean isNumber()
{
  String newString = "crash";
  boolean isNumber = true;
  for (int i=0; i<newString.length(); i++)
  {
     if (Character.isDigit(newString.charAt(i)))
     {
        isNumber = true;
        continue; // continue looping through the string. Go on to the next index.
                  // The character at index i is a number.
     }
     else
     {
        isNumber = false; 
        break; // terminate the for-loop and return it as false! It is not a number!
     }
   }
  return isNumber;
}

Я не могу понять, что не так. Моя логика, кажется, в порядке, но мое кодирование не так.

РЕДАКТИРОВАТЬ: Я понял это. Спасибо за вашу помощь!

Ответы [ 6 ]

3 голосов
/ 05 октября 2011

Я только что запустил этот код, и я получил false, как и ожидалось. Пожалуйста, проверьте, правильно ли вы работаете.

Вот более простой способ выразить эту функцию:

public boolean isNumber(String string) {
  for (int i = 0; i < string.length(); i++) {
    if (!Character.isDigit(string.charAt(i))) {
      return false;
    }
  }

  return true;
}
1 голос
/ 05 октября 2011

Возможно, я вас не правильно понял ... но так как вы используете одну и ту же переменную "isNumber" и продолжаете, когда получаете положительное совпадение ... результат, который вы вернете, всегда будет последнимсимвол строки, кроме случаев, когда вы получаете не числовой символ, и в этом случае вы сразу выходите.

Хотите проверить, является ли вся строка строкой?Или если он содержит число?

1 голос
/ 05 октября 2011

Ну, вы можете использовать Integer.parseInt("string") и поймать исключение.

try {
     int num = Integer.parseInt("string");
     return true;
} catch (NumberFormatException nfe) {
     return false;
}

Или другим способом с regEx:

if ("string".replaceAll("\\d+","").length() > 0) { 
    //false 
} else { 
    //true
}
1 голос
/ 05 октября 2011

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

public boolean isNumber(String newString)
{
    for (int i=0; i != newString.length(); i++)
    {
        if (!Character.isDigit(newString.charAt(i))) 
        {
            return false;
        }
    }
    return true;
}

// a regex equivalent
public boolean isNumberRegex(String newString)
{
    return newString.match("\\d+");
}

Приведенный выше метод проверяет, являются ли все символы цифрами.

Если я неправильно понял ваш вопрос, и вы хотите проверить, является ли любой из символов цифрой:

public boolean hasNumber(String newString)
{
    for (int i=0; i != newString.length(); i++)
    {
        if (Character.isDigit(newString.charAt(i))) 
        {
            return true;
        }
    }
    return false;
}

// regex equivalent
public boolean hasNumberRegex(String newString)
{
    return newString.match(".*\\d.*");
}
0 голосов
/ 05 октября 2011

Я думаю, что этот код должен работать, но, на мой взгляд, установка переменной, а затем ее взлом только для того, чтобы вернуть ее, ужасны.(Я знаю других кодеров, подобных этому; ИМХО, они не правы.) Мне также не нравится вводить ненужные тестовые переменные, такие как решение NullUserException.Я бы просто вернулся напрямую.

[ РЕДАКТИРОВАТЬ : Этот код такой же, как у Брокмана]

public boolean isNumber() /* Note: returns true for empty string */
{
String newString = "crash";
for (int i=0; i<newString.length(); i++)
{
   if (!Character.isDigit(newString.charAt(i)))
   {
    return false; /* non-digit detected */
   }
 }
return true; /* all characters were digits */
}
0 голосов
/ 05 октября 2011
public static boolean isNumber(String str)
{
    int len = str.length();
    boolean isNumber = false;

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

    return isNumber;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...