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

131
19

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


Hello123

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

спросил(а) 2009-12-14T23:23:00+03:00 9 лет, 11 месяцев назад
6
Решение
88

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


[0-9]

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

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


Изменить: я хотел бы сказать, что Regex может быть немного за бортом для этого примера, если действительно код, написанный другим отправителем, работает... но я бы порекомендовал изучить Regex вообще, потому что они очень мощный, и пригодится больше, чем я хотел бы признать (после нескольких лет ожидания, прежде чем дать им шанс).

ответил(а) 2009-12-14T23:26:00+03:00 9 лет, 11 месяцев назад
Еще 5 ответов
146

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


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

РЕДАКТИРОВАТЬ: Добавлен вариант использованияDelimiter от Carlos

ответил(а) 2009-12-14T23:27:00+03:00 9 лет, 11 месяцев назад
136

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


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

И тогда вы просто конвертируете это в int (или Integer) оттуда.

ответил(а) 2009-12-15T00:32:00+03:00 9 лет, 11 месяцев назад
69

Я думал, что Michael regex - это самое простое решение, но, если подумать, просто "\ 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());
}
}

ответил(а) 2009-12-15T07:57:00+03:00 9 лет, 11 месяцев назад
66

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


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

ответил(а) 2009-12-15T00:45:00+03:00 9 лет, 11 месяцев назад
45

Хотя я знаю, что это 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);

ответил(а) 2016-08-27T19:25:00+03:00 3 года, 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема