Подтвердить что ты не робот

Получить int из String, также содержащий буквы, в Java

Как получить значение int из строки, такой как 423e - то есть строка, содержащая число, но также возможно письмо?

Integer.parseInt() терпит неудачу, поскольку строка должна быть полностью числом.

4b9b3361

Ответ 1

Если вы не говорите о базовых 16 числах (для которых существует метод для синтаксического анализа как Hex), вам необходимо явно выделить часть, которая вас интересует, а затем преобразовать. В конце концов, какова будет семантика чего-то вроде 23e44e11d в базе 10?

Регулярные выражения могут сделать трюк, если вы точно знаете, что у вас есть только один номер. Java имеет встроенный анализатор регулярных выражений.

Если, с другой стороны, ваша цель состоит в том, чтобы объединить все цифры и сбросить альфы, тогда это довольно просто сделать, итерации символа символом для создания строки с помощью StringBuilder, а затем синтаксического анализа этого.

Ответ 2

Заменить все незначимые на пустое: оставшаяся строка содержит только цифры.

Integer.parseInt(s.replaceAll("[\\D]", ""))

Это также приведет к удалению нецифровых цифр между цифрами, поэтому "x1x1x" становится 11.

Если вам нужно подтвердить, что строка состоит из последовательности цифр (по крайней мере одной), возможно, после буквы, а затем используйте это:

s.matches("[\\d]+[A-Za-z]?")

Ответ 3

Класс NumberFormat будет анализировать только строку до тех пор, пока не достигнет символа, не подлежащего анализу:

((Number)NumberFormat.getInstance().parse("123e")).intValue()

будет возвращать 123.

Ответ 4

Просто пройдите по строке, создав 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');
}

Ответ 5

Вы также можете использовать сканер:

Scanner s = new Scanner(MyString);
s.nextInt();

Ответ 6

Возможно, получите размер строки и цикл через каждый символ и вызовите 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);

Ответ 7

Я недавно получил этот вопрос в интервью

Строка A = "abc123def45e";

Я могу сделать A.replaceAll("[az]", ""), и это вернет все целые числа 12345, но меня попросили разделить 123 и 45 и добавить эти значения.

Есть ли способ разделить эту строку и получить 123 и 45 отдельно?

Заранее спасибо.