Получить int из строки, также содержащей буквы, в Java - PullRequest
27 голосов
/ 26 февраля 2010

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

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

Ответы [ 6 ]

78 голосов
/ 26 февраля 2010

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

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

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

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

s.matches("[\\d]+[A-Za-z]?")
20 голосов
/ 26 февраля 2010

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

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

, следовательно, вернет 123.

10 голосов
/ 26 февраля 2010

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

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

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

5 голосов
/ 10 апреля 2013

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

Scanner s = new Scanner(MyString);
s.nextInt();
4 голосов
/ 26 февраля 2010

Просто пройдите по строке, создавая 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');
}
2 голосов
/ 26 февраля 2010

Возможно, получите размер строки и пройдитесь по каждому символу и вызовите 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...