Извлеките целую часть в строке

Как что лучший способ состоит в том, чтобы извлечь целую часть строки

Hello123

Как Вы получаете 123 части. Можно ли отсортировать взлома, это с помощью Сканера Java, там лучший путь?

19
задан skaffman 15 May 2011 в 12:55
поделиться

5 ответов

Почему бы вам просто не использовать Регулярное выражение для соответствия той части строки, которую вы хотите?

[0-9]

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

Посмотрите на http://www.regular-expressions.info/tutorial.html , чтобы понять, как работают регулярные выражения.

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

8
ответ дан 30 November 2019 в 01:57
поделиться

Как объяснялось ранее, попробуйте использовать регулярные выражения. Это должно помочь:

String value = "Hello123";
String intValue = value.replaceAll("[^0-9]", ""); // returns 123

А затем вы просто конвертируете это в int (или Integer) оттуда.

32
ответ дан 30 November 2019 в 01:57
поделиться

Я считаю, что вы можете сделать что-то вроде:

Scanner in = new Scanner("Hello123").useDelimiter("[^0-9]+");
int integer = in.nextInt();

РЕДАКТИРОВАТЬ: Добавлено предложение useDelimiter от Карлоса

25
ответ дан 30 November 2019 в 01:57
поделиться

Если вы хотите конечная цифра, это будет работать:

import java.util.regex.*;

public class Example {


    public static void main(String[] args) {
        Pattern regex = Pattern.compile("\\D*(\\d*)");
        String input = "Hello123";
        Matcher matcher = regex.matcher(input);

        if (matcher.matches() && matcher.groupCount() == 1) {
            String digitStr = matcher.group(1);
            Integer digit = Integer.parseInt(digitStr);
            System.out.println(digit);            
        }

        System.out.println("done.");
    }
}
4
ответ дан 30 November 2019 в 01:57
поделиться

Я думал, что регулярное выражение Майкла - самое простое возможное решение, но если подумать, просто «\ d +» работает, если вы используете Matcher.find () вместо Matcher.matches ():

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Example {

    public static void main(String[] args) {
        String input = "Hello123";
        int output = extractInt(input);

        System.out.println("input [" + input + "], output [" + output + "]");
    }

    //
    // Parses first group of consecutive digits found into an int.
    //
    public static int extractInt(String str) {
        Matcher matcher = Pattern.compile("\\d+").matcher(str);

        if (!matcher.find())
            throw new NumberFormatException("For input string [" + str + "]");

        return Integer.parseInt(matcher.group());
    }
}
4
ответ дан 30 November 2019 в 01:57
поделиться
Другие вопросы по тегам:

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