Извлечение целочисленной части в строку - PullRequest
19 голосов
/ 14 декабря 2009

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

Hello123

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

Ответы [ 7 ]

29 голосов
/ 15 декабря 2009

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

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

И затем вы просто конвертируете это в целое число (или целое число).

24 голосов
/ 14 декабря 2009

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

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

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

8 голосов
/ 14 декабря 2009

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

[0-9]

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

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

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

4 голосов
/ 15 декабря 2009

Я думал, что регулярное выражение Майкла было самым простым из возможных решений, но с другой стороны, просто "\ 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 голосов
/ 15 декабря 2009

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

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.");
    }
}
3 голосов
/ 27 августа 2016

Хотя я знаю, что это 6-летний вопрос, но я выкладываю ответ для тех, кто хочет избежать изучения регулярных выражений прямо сейчас (что вы должны кстати). Этот подход также дает число между цифрами (например, 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);
0 голосов
/ 17 октября 2018
String[] parts = s.split("\\D+");    //s is string containing integers
int[] a;
a = new int[parts.length];
for(int i=0; i<parts.length; i++){
a[i]= Integer.parseInt(parts[i]);
System.out.println(a[i]);
} 
...