Как проверить, является ли строка числовой в Java

INT ( somenumber ) будет иметь значение только в терминах отображения, то есть отображать в цифрах в цифрах [ somenumber »и не ограничиваться только 11. Вы соединяете его с помощью ZEROFILL, который добавит нули до тех пор, пока он не будет соответствовать вашей длине

. Обратите внимание, что значение, хранящееся в базе данных, не изменяется, любые вычисления будут по-прежнему вести себя так, как есть.

Замечания:

  • , если значение имеет меньшую цифру, чем « somenumber », ZEROFILL будет содержать нули. INT (5) ZEROFILL с сохраненным значением 32 покажет 00032 INT (5) с сохраненным значением 32 покажет 32 INT с сохраненным значением 32 покажет 32
  • , если значение имеет больше цифры чем « somenumber », будет показано сохраненное значение. INT (3) ZEROFILL с сохраненным значением 250000 отобразит 250000 INT (3) с сохраненным значением 250000, покажет 250000 INT с сохраненным значением 250000, покажет 250000

. Аналогичный применяется также к BIGINT, MEDIUMINT, SMALLINT и TINYINT.

806
задан Boann 29 November 2015 в 19:15
поделиться

5 ответов

Проанализируйте его (т.е. с помощью Integer # parseInt ) и просто перехватите исключение. =)

Чтобы уточнить: функция parseInt проверяет, может ли она анализировать число в любом случае (очевидно), и если вы все равно хотите проанализировать его, вы не собираетесь снижать производительность, фактически выполняя синтаксический анализ.

Если вы не хотите анализировать его (или анализировать очень, очень редко), вы можете, конечно, сделать это по-другому.

2
ответ дан 22 November 2019 в 21:11
поделиться

Вот почему мне нравится подход Try * в .NET. В дополнение к традиционному методу Parse, подобному методу Java, у вас также есть метод TryParse. Я плохо разбираюсь в синтаксисе Java (параметры вывода?), Поэтому, пожалуйста, рассматривайте следующее как своего рода псевдокод. Тем не менее, это должно прояснить концепцию.

boolean parseInteger(String s, out int number)
{
    try {
        number = Integer.parseInt(myString);
        return true;
    } catch(NumberFormatException e) {
        return false;
    }
}

Использование:

int num;
if (parseInteger("23", out num)) {
    // Do something with num.
}
2
ответ дан 22 November 2019 в 21:11
поделиться

Вы можете использовать NumberFormat # parse :

try
{
     NumberFormat.getInstance().parse(value);
}
catch(ParseException e)
{
    // Not a number.
}
12
ответ дан 22 November 2019 в 21:11
поделиться

Обычно это делается с помощью простой пользовательской функции (например, Roll-your-own "isNumeric").

Что-то вроде:

public static boolean isNumeric(String str) { 
  try {  
    Double.parseDouble(str);  
    return true;
  } catch(NumberFormatException e){  
    return false;  
  }  
}

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

Альтернативный подход может заключаться в использовании регулярного выражения для проверки действительности числа:

public static boolean isNumeric(String str) {
  return str.matches("-?\\d+(\\.\\d+)?");  //match a number with optional '-' and decimal.
}

Однако будьте осторожны с указанным выше механизмом RegEx, поскольку он не сработает, если вы используете неарабские цифры (т. Е. цифры, отличные от 0 до 9). Это связано с тем, что часть "\ d" регулярного выражения будет соответствовать только [0-9] и фактически не имеет международной числовой информации. (Спасибо OregonGhost за указание на это!)

Или даже другой альтернативой является использование встроенного в Java объекта java.text.NumberFormat, чтобы увидеть, находится ли после анализа строки позиция анализатора в конце строки. Если это так, мы можем предположить, что вся строка является числовой:

public static boolean isNumeric(String str) {
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition pos = new ParsePosition(0);
  formatter.parse(str, pos);
  return str.length() == pos.getIndex();
}
875
ответ дан 22 November 2019 в 21:11
поделиться

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

0
ответ дан 22 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: