Извлечь целочисленную часть в строке

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

Hello123 

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

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

 [0-9] 

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

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

Изменить: я хотел бы сказать, что Regex может быть немного за бортом для этого примера, если действительно код, написанный другим отправителем, работает … но я по-прежнему рекомендую изучить 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(); 

EDIT: добавлено предложение UseDelimiter от 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-летний вопрос, но я отправляю ответ для тех, кто хочет избежать изучения регулярного выражения прямо сейчас (что вам должно быть btw). Этот подход также дает число между цифрами (например, 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); 
  • Как я могу форматировать номер строки, чтобы иметь запятые и круглые?
  • Разница между «char» и «String» в Java
  • как преобразовать строку java в объект Date
  • Строка std :: содержит нулевой ограничитель?
  • byte в hex string
  • Разделительная строка с разделителями-запятыми -> FUNCTION db.CHARINDEX не существует
  • Как реализуется std :: string?
  • Как создать случайную буквенно-цифровую строку?
  • Как я могу форматировать число в строку с ведущими нулями?
  • Java String.split () Regex
  • Как преобразовать CamelCase в удобочитаемые имена на Java?
  • Давайте будем гением компьютера.