Java String - Смотрите, содержит ли строка только числа, а не буквы
У меня есть строка, которую я загружаю по всему моему приложению, и она изменяется от чисел к буквам и тому подобное. У меня есть простой оператор if
, чтобы увидеть, содержит ли он буквы или цифры, но что-то работает неправильно. Вот фрагмент.
String text = "abc";
String number;
if (text.contains("[a-zA-Z]+") == false && text.length() > 2) {
number = text;
}
Хотя переменная text
содержит буквы, условие возвращается как true
. Значение параметра &&
должно быть равнозначно, поскольку оба условия должны быть true
для обработки number = text;
==============================
Решение:
Я смог решить это, используя следующий код, предоставленный комментарием по этому вопросу. Все остальные сообщения также действительны!
То, что я использовал, работало с первого комментария. Хотя все предоставленные примеры кода также являются действительными!
String text = "abc";
String number;
if (Pattern.matches("[a-zA-Z]+", text) == false && text.length() > 2) {
number = text;
}
Ответы
Ответ 1
Если вы будете обрабатывать номер в виде текста, а затем измените:
if (text.contains("[a-zA-Z]+") == false && text.length() > 2){
в
if (text.matches("[0-9]+") && text.length() > 2) {
Вместо проверки того, что строка не содержит буквенных символов, убедитесь, что она содержит только цифры.
Если вы действительно хотите использовать числовое значение, используйте Integer.parseInt()
или Double.parseDouble()
, как описано ниже.
В качестве побочного примечания, как правило, считается неправильной практикой сравнения булевых значений с true
или false
. Просто используйте if (condition)
или if (!condition)
.
Ответ 2
Вы также можете использовать NumberUtil.isNumber(String str) из Apache Commons
Ответ 3
Вот как я это сделаю:
if(text.matches("^[0-9]*$") && text.length() > 2){
//...
}
$
будет избегать частичного совпадения, например; 1B
.
Ответ 4
Существует множество возможностей для получения чисел от String
в Java (и наоборот). Вы можете пропустить часть регулярного выражения, чтобы избавить себя от этого.
Например, вы можете попробовать и посмотреть, что Double.parseDouble(String s)
возвращается для вас. Он должен выбросить NumberFormatException
, если он не найдет подходящее значение в строке. Я бы предложил эту технику, потому что вы могли бы фактически использовать значение, представленное String
как числовой тип.
Ответ 5
Вы можете использовать Regex.Match
if(text.matches("\\d*")&& text.length() > 2){
System.out.println("number");
}
Или вы можете использовать инверсии, такие как Integer.parseInt(String)
или лучше Long.parseLong(String)
для больших чисел
например, например:
private boolean onlyContainsNumbers(String text) {
try {
Long.parseLong(text);
return true;
} catch (NumberFormatException ex) {
return false;
}
}
И затем проверьте:
if (onlyContainsNumbers(text) && text.length() > 2) {
// do Stuff
}
Ответ 6
import java.util.*;
class Class1 {
public static void main(String[] argh) {
boolean ans = CheckNumbers("123");
if (ans == true) {
System.out.println("String contains numbers only");
} else {
System.out.println("String contains other values as well");
}
}
public static boolean CheckNumbers(String input) {
for (int ctr = 0; ctr < input.length(); ctr++) {
if ("1234567890".contains(Character.valueOf(input.charAt(ctr)).toString())) {
continue;
} else {
return false;
}
}
return true;
}
}
Ответ 7
Этот код уже написан. Если вы не возражаете (крайне) незначительный удар производительности, который, вероятно, не хуже, чем выполнение регулярного выражения, используйте Integer.parseInt() или Double.parseDouble(). Это сразу скажет вам, если строка - это только числа (или число, если это необходимо). Если вам нужно обрабатывать более длинные строки чисел, BigInteger и BigDecimal, которые принимают Strings. Любой из них будет вызывать NumberFormatException, если вы попытаетесь передать ему не число (целое или десятичное число, основанное на выбранном вами, конечно). Альтернативно, в зависимости от ваших требований, просто перебирайте символы в строке и проверяйте Character.isDigit() и/или Character.isLetter().
Ответ 8
boolean isNum = text.chars(). allMatch (c → c >= 48 & c <= 57)
Ответ 9
Ниже регулярных выражений можно использовать, чтобы проверить, имеет ли строка только номер или нет:
if (str.matches(".*[^0-9].*")) or if (str.matches(".*\\D.*"))
Оба условия выше возвращают true
, если String содержит не номера. На false
строка содержит только числа.