Как я могу получить значение 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.
Вы также можете использовать сканер:
Scanner s = new Scanner(MyString);
s.nextInt();
new Scanner("456e").useDelimiter("\\D").nextInt()
.
- person Diogo Kollross; 02.03.2015
Просто пройдитесь по строке, создав целое число, как обычно, но игнорируя нечисловые символы:
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');
}
res = res * 10 + c - '0';
- person benkc; 21.08.2013
Возможно, получите размер строки и выполните цикл по каждому символу и вызовите 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);