Проверьте, содержит ли строка String Java

Я пишу программу, в которой пользователь вводит String в следующем формате:

"What is the square of 10?"
  • Мне нужно проверить, есть ли число в строке
  • а затем извлечь только номер.
  • Если я использую .contains("\\d+") или .contains("[0-9]+"), программа не может найти номер в String, независимо от того, что представляет вход, но .matches("\\d+") будет работать только при наличии только чисел.

Что я могу использовать в качестве решения для поиска и извлечения?

Ответ 1

Решение, с которым я пошел, выглядит так:

    Pattern numberPat = Pattern.compile("\\d+");
    Matcher matcher1 = numberPat.matcher(line);

    Pattern stringPat = Pattern.compile("What is the square of", Pattern.CASE_INSENSITIVE);
    Matcher matcher2 = stringPat.matcher(line);

    if (matcher1.find() && matcher2.find())
    {
        int number = Integer.parseInt(matcher1.group());                    
        pw.println(number + " squared = " + (number * number));
    }

Я уверен, что это не идеальное решение, но оно соответствовало моим потребностям. Спасибо всем за помощь.:)

Ответ 2

попробуйте это

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

Ответ 3

Если вы хотите извлечь первый номер из входной строки, вы можете сделать -

public static String extractNumber(final String str) {                

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

    StringBuilder sb = new StringBuilder();
    boolean found = false;
    for(char c : str.toCharArray()){
        if(Character.isDigit(c)){
            sb.append(c);
            found = true;
        } else if(found){
            // If we already found a digit before and this char is not a digit, stop looping
            break;                
        }
    }

    return sb.toString();
}

Примеры:

Для ввода "123abc" метод выше вернет 123.

Для "abc1000def", 1000.

Для "555abc45", 555.

Для "abc" вернется пустая строка.

Ответ 4

s=s.replaceAll("[*a-zA-Z]", "") заменяет все алфавиты

s=s.replaceAll("[*0-9]", "") заменяет все числа

если вы делаете над двумя заменами, вы получите всю специальную строку

Если вы хотите извлечь только целые числа из String s=s.replaceAll("[^0-9]", "")

Если вы хотите извлечь только алфавиты из String s=s.replaceAll("[^a-zA-Z]", "")

Счастливое кодирование:)

Ответ 5

Pattern p = Pattern.compile("(([A-Z].*[0-9])");
Matcher m = p.matcher("TEST 123");
boolean b = m.find();
System.out.println(b);

Ответ 6

Код ниже достаточно для "Проверить, содержит ли строка строки в Java"

Pattern p = Pattern.compile("([0-9])");
Matcher m = p.matcher("Here is ur string");

if(m.find()){
    System.out.println("Hello "+m.find());
}

Ответ 7

Я думаю, что это быстрее, чем регулярное выражение.

public final boolean containsDigit(String s) {
    boolean containsDigit = false;

    if (s != null && !s.isEmpty()) {
        for (char c : s.toCharArray()) {
            if (containsDigit = Character.isDigit(c)) {
                break;
            }
        }
    }

    return containsDigit;
}

Ответ 8

Попробуйте следующий шаблон:

.matches("[a-zA-Z ]*\\d+.*")

Ответ 9

Я не мог найти правильный шаблон. Пожалуйста, следуйте ниже руководству для небольшого и сладкого решения.

String regex = "(.)*(\\d)(.)*";      
Pattern pattern = Pattern.compile(regex);
String msg = "What is the square of 10?";
boolean containsNumber = pattern.matcher(msg).matches();

Ответ 10

public String hasNums(String str) {
        char[] nums = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
        char[] toChar = new char[str.length()];
        for (int i = 0; i < str.length(); i++) {
            toChar[i] = str.charAt(i);
            for (int j = 0; j < nums.length; j++) {
                if (toChar[i] == nums[j]) { return str; }
            }
        }
        return "None";
    }

Ответ 11

Вы можете попробовать это

String text = "ddd123.0114cc";
    String numOnly = text.replaceAll("\\p{Alpha}","");
    try {
        double numVal = Double.valueOf(numOnly);
        System.out.println(text +" contains numbers");
    } catch (NumberFormatException e){
        System.out.println(text+" not contains numbers");
    }     

Ответ 12

Поскольку вы хотите не только искать число, но и извлекать его, вы должны написать небольшую функцию, выполняющую это для вас. Идите по буквам, пока не увидите цифру. Ах, только что нашел необходимый код для вас в stackoverflow: найти целое число в строке. Посмотрите на принятый ответ.

Ответ 13

.matches(".*\\d+.*") работает только для чисел, но не для других символов, таких как // или * и т.д.

Ответ 14

ASCII находится в начале UNICODE, поэтому вы можете сделать что-то вроде этого:

(x >= 97 & x <= 122) || (x >= 65 & x <= 90)

//97 == 'a' и 65 = 'A', я уверен, что вы можете узнать другие значения...