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

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

Hello123

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

Ответы

Ответ 1

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

[0-9]

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

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

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

Ответ 2

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

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

РЕДАКТИРОВАТЬ: Добавлен вариант использованияDelimiter от Carlos

Ответ 3

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

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

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

Ответ 4

Я думал, что Michael regex - это самое простое решение, но, если подумать, просто "\ 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());
    }
}

Ответ 5

Предполагая, что вам нужна задняя цифра, это будет работать:

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.");
    }
}

Ответ 6

Хотя я знаю, что это 6-летний вопрос, но я отправляю ответ для тех, кто хочет избежать обучения регулярному выражению прямо сейчас (что вам должно быть btw). Этот подход также дает число между цифрами (например, HP 123 KT 567 вернет 123567)

    Scanner scan = new Scanner(new InputStreamReader(System.in));
    System.out.print("Enter alphaNumeric: ");
    String x = scan.next();
    String numStr = "";
    int num;

    for (int i = 0; i < x.length(); i++) {
        char charCheck = x.charAt(i);
        if(Character.isDigit(charCheck)) {
            numStr += charCheck;
        }
    }

    num = Integer.parseInt(numStr);
    System.out.println("The extracted number is: " + num);