У меня есть строка "He3llo5"

Как удалить эту строку, чтобы остались только числа?

Желаемый результат:

35
-3
Nelson 4 Май 2021 в 02:24

3 ответа

Лучший ответ

Вы можете использовать пример паттерна

    Pattern intsOnly=Pattern.compile("\\d+");
        Matcher make=intsOnly.matcher(string);
        make.find();
        string=make.group();
0
Mohsen El_sayed 3 Май 2021 в 23:41

Самое простое решение: используйте регулярное выражение и .replaceAll():

String string="He3llo5";
String result = string.replaceAll("[^\\d.]", "");
System.out.println(result);

Какие отпечатки:

35

В качестве альтернативы вы можете написать свой собственный метод, который использует Character.isDigit() и StringBuilder следующим образом:

public static String stripAlphabet(String s) {
    int len = s.length();
    StringBuilder str = new StringBuilder();
    for(int i = 0; i < len; i++) {
        char c = s.charAt(i);
        str.append(Character.isDigit(c) ? c : "");
    }
    return str.toString();
}

Следующее также производит в результате 35:

String string="He3llo5";
String result = stripAlphabet(string);
System.out.println(result);
0
Spectric 3 Май 2021 в 23:34

ТЛ ; др

Integer.parseInt(
        "He3llo5"
                .codePoints()
                .filter( Character :: isDigit )
                .collect(
                        StringBuilder :: new ,
                        StringBuilder :: appendCodePoint ,
                        StringBuilder :: append
                )
                .toString()
)

35

Loop кодовые точки

Прокрутите номер кодовой точки Unicode каждого символа, спрашивая, представляет ли эта кодовая точка символ, являющийся цифрой. Если да, соберите этот код или его преобразование в String.

Вызов String#codePoints дает нам IntStream, поток целых чисел кодовой точки.

Мы отфильтровываем буквы, вызывая Character#IsDigit. Собираем оставшиеся цифровые символы в StringBuilder.

Из строки цифр мы анализируем как int, вызывая Integer.parseInt.

String input = "He3llo5";

IntStream codePoints = input.codePoints();
String digits =
        codePoints
                .filter( Character :: isDigit )
                .collect( StringBuilder :: new ,
                        StringBuilder :: appendCodePoint ,
                        StringBuilder :: append )
                .toString();
int result = Integer.parseInt( digits );

результат = 35

Избегайте char

Имейте в виду, что тип char в Java устарел. Этот тип не может представить даже половину символов, определенных в Unicode. Используйте целые числа кодовой точки вместо char.

0
Basil Bourque 4 Май 2021 в 00:48