Extrair parte inteira em string

Qual é a melhor maneira de extrair a parte inteira de uma string como

Hello123 

Como você consegue a parte 123? Você pode classificá-lo usando o Java’s Scanner, existe uma maneira melhor?

Por que você não usa apenas uma Expressão Regular para corresponder à parte da string que deseja?

 [0-9] 

Isso é tudo que você precisa, além do que quer que rodeie os caracteres necessários.

Consulte http://www.regular-expressions.info/tutorial.html para entender como as expressões regulares funcionam.

Edit: Eu gostaria de dizer que Regex pode ser um pouco overboard para este exemplo, se de fato o código que o outro apresentador postou funciona … mas eu ainda recomendo aprender Regex em geral, pois eles são muito poderosos, e virá a calhar mais do que eu gostaria de admitir (depois de esperar vários anos antes de dar-lhes um tiro).

Como explicado anteriormente, tente usar expressões regulares. Isso deve ajudar:

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

E então você acabou de converter isso para um int (ou Integer) de lá.

Eu acredito que você pode fazer algo como:

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

EDIT: Adicionado sugestão useDelimiter por Carlos

Supondo que você queira um dígito à direita, isso funcionaria:

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

Eu estava pensando que o regex de Michael era a solução mais simples possível, mas pensando bem, apenas “\ d +” funciona se você usar Matcher.find () em vez 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()); } } 

Embora eu saiba que é uma pergunta de 6 anos de idade, mas estou postando uma resposta para aqueles que querem evitar o aprendizado de regex agora (que você deve conhecer). Essa abordagem também fornece o número entre os dígitos (por exemplo, o HP 123 KT 567 retornará 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);