Как получить значение int из строки, такой как 423e
- то есть строка, содержащая число, но также возможно письмо?
Integer.parseInt()
терпит неудачу, поскольку строка должна быть полностью числом.
Как получить значение int из строки, такой как 423e
- то есть строка, содержащая число, но также возможно письмо?
Integer.parseInt()
терпит неудачу, поскольку строка должна быть полностью числом.
Если вы не говорите о базовых 16 числах (для которых существует метод для синтаксического анализа как Hex), вам необходимо явно выделить часть, которая вас интересует, а затем преобразовать. В конце концов, какова будет семантика чего-то вроде 23e44e11d в базе 10?
Регулярные выражения могут сделать трюк, если вы точно знаете, что у вас есть только один номер. Java имеет встроенный анализатор регулярных выражений.
Если, с другой стороны, ваша цель состоит в том, чтобы объединить все цифры и сбросить альфы, тогда это довольно просто сделать, итерации символа символом для создания строки с помощью StringBuilder, а затем синтаксического анализа этого.
Заменить все незначимые на пустое: оставшаяся строка содержит только цифры.
Integer.parseInt(s.replaceAll("[\\D]", ""))
Это также приведет к удалению нецифровых цифр между цифрами, поэтому "x1x1x"
становится 11
.
Если вам нужно подтвердить, что строка состоит из последовательности цифр (по крайней мере одной), возможно, после буквы, а затем используйте это:
s.matches("[\\d]+[A-Za-z]?")
Класс NumberFormat будет анализировать только строку до тех пор, пока не достигнет символа, не подлежащего анализу:
((Number)NumberFormat.getInstance().parse("123e")).intValue()
будет возвращать 123.
Просто пройдите по строке, создав int как обычно, но игнорируйте символы, отличные от числа:
int res = 0;
for (int i=0; i < str.length(); i++) {
char c = s.charAt(i);
if (c < '0' || c > '9') continue;
res = res * 10 + (c - '0');
}
Вы также можете использовать сканер:
Scanner s = new Scanner(MyString);
s.nextInt();
Возможно, получите размер строки и цикл через каждый символ и вызовите isDigit() для каждого символа. Если это цифра, добавьте ее в строку, которая только собирает числа перед вызовом Integer.parseInt().
Что-то вроде:
String something = "423e";
int length = something.length();
String result = "";
for (int i = 0; i < length; i++) {
Character character = something.charAt(i);
if (Character.isDigit(character)) {
result += character;
}
}
System.out.println("result is: " + result);
Я недавно получил этот вопрос в интервью
Строка A = "abc123def45e";
Я могу сделать A.replaceAll("[az]", ""), и это вернет все целые числа 12345, но меня попросили разделить 123 и 45 и добавить эти значения.
Есть ли способ разделить эту строку и получить 123 и 45 отдельно?
Заранее спасибо.