Extraer parte entera en cadena

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

Hello123 

¿Cómo se obtiene la parte 123? Puede clasificarlo usando el escáner de Java, ¿hay alguna manera mejor?

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

 [0-9] 

Eso es todo lo que necesita, además de los caracteres que lo rodean.

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

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

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 lo convierte a un int (o entero) a partir de ahí.

Creo que puedes hacer algo como:

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

EDITAR: Se agregó la sugerencia de uso de Delimiter por Carlos

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

He estado pensando que la expresión regular de Michael es la solución más simple posible, pero pensándolo bien, solo “\ d +” funciona si utilizas 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 quieren evitar el aprendizaje de expresiones regulares en este momento (que por cierto debería ser). Este enfoque también da el número entre los dígitos (por ejemplo, HP 123 KT 567 devolverá 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);