Вопрос

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

Hello123

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

Это было полезно?

Решение

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

[0-9]

Это все, что вам нужно, плюс все, что ему нужно.

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

РЕДАКТИРОВАТЬ: Я хотел бы сказать, что Regex может быть немного закусочной для этого примера, если действительно код, который другой представитель работает, работает ... но я все равно рекомендую обучать режиму в целом, потому что они очень мощные, и пригодится больше, чем я хотел бы признать (после нескольких лет ожидания, прежде чем дать им шанс).

Другие советы

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

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

И тогда вы просто преобразуете это в Int (или Integer) оттуда.

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

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

Редактировать: добавлено предложение по использованию melimiter Carlos

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

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

Я думал, что режима Майкла была самым простым возможным решением, но по второй мысли только « 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());
    }
}

Хотя я знаю, что это 6 -летний вопрос, но я публикую ответ для тех, кто хочет избежать учебного заведения прямо сейчас (что вы должны, кстати). Этот подход также дает количество между цифрами (например, HP123Кт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);
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]);
} 
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top