Pregunta

¿Cuál es la mejor manera de extraer la parte entera de una cadena como

Hello123

¿Cómo se obtiene la parte 123? Puedes hackearlo usando el escáner de Java, ¿hay una mejor manera?

¿Fue útil?

Solución

¿Por qué no usas una expresión regular para que coincida con la parte de la cadena que deseas?

[0-9]

Eso es todo lo que necesitas, además de lo que requiera los chars que requiera.

Mirar http://www.regular-expressions.info/tutorial.html para comprender cómo funcionan las expresiones regulares.

Editar: Me gustaría decir que Regex puede estar un poco exagerado para este ejemplo, si el código que el otro remitente publicó funciona ... pero aún recomiendo aprender a Regex en general, porque son muy poderosos, y Volverá a ser más útil de lo que me gustaría admitir (después de esperar varios años antes de darles una oportunidad).

Otros consejos

Como se explicó anteriormente, intente usar expresiones regulares. Esto debería ayudar:

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

Y luego solo convierte eso en un int (o entero) desde allí.

Creo que puedes hacer algo como:

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

EDITAR: Se agregó sugerencia de UtilSeLimiter por Carlos

Suponiendo que desee un dígito final, esto funcionaría:

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

Había estado pensando que la regex de Michael era la solución más simple posible, pero en segundo pensamiento solo " d+" funciona si usa matcher.find () en lugar de 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());
    }
}

Aunque sé que es una pregunta de 6 años, pero estoy publicando una respuesta para aquellos que desean evitar el aprendizaje de Regex en este momento (que deberían por cierto). Este enfoque también da el número entre los dígitos (por ejemplo, HP123Kt567 regresará 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]);
} 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top