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).

Ответ 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 строка содержит только числа.