Лучший способ получить целую часть строки "600sp"? - PullRequest
10 голосов
/ 24 августа 2010

У меня есть строка, скажем «600sp», из которой я хочу получить целую часть (600).

Если я делаю Integer.valueOf("600sp"), я получаю исключение из-за нечислового значения "s", встречающегося в строке.

Какой самый быстрый и чистый способ получить целую часть?

Спасибо!

Ответы [ 6 ]

15 голосов
/ 24 августа 2010

Если ваш формат строки всегда будет числом, за которым следуют некоторые символы, попробуйте это

mystr.split("[a-z]")[0]
7 голосов
/ 24 августа 2010

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

    Pattern p = Pattern.compile("(\\d+)");
    Matcher m = p.matcher("600sp");
    Integer j = null;
    if (m.find()) {
        j = Integer.valueOf(m.group(1));
    }

Это регулярное выражение переводится как «дайте мне набор непрерывных цифр в начале строки, где есть хотя бы 1 цифра». Если у вас есть другие ограничения, такие как разбор вещественных чисел, а не целых чисел, вам необходимо изменить код.

3 голосов
/ 24 августа 2010

Для более короткого и менее конкретного решения добавьте больше контекста.

StringBuffer numbers = new StringBuffer();
for(char c : "asdf600sp".toCharArray())
{
  if(Character.isDigit(c)) numbers.append(c);
}

System.out.println(numbers.toString());

В свете новой информации, улучшенное решение:

Integer.valueOf("600sp".replace("sp",""));
2 голосов
/ 24 августа 2010

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

2 голосов
/ 24 августа 2010

Вы можете использовать

Integer.valueOf("0" + "600sp".replaceAll("(\\d*).*", "$1"))

Примечание:

С этим регулярным выражением вы сохраните только начальные числа.1010 * используется, чтобы не вылетать, когда у меня нет цифр.Tks @jherico!

1 голос
/ 24 августа 2010

Если строка гарантированно (как вы говорите) является целым числом, за которым следует «sp», я бы посоветовала не использовать более универсальный синтаксический анализатор регулярных выражений, который бы также принимал другие варианты (которые должны быть отклонены как ошибки ).

Просто проверьте, заканчивается ли оно "sp", а затем проанализируйте подстроку без последних двух символов.

...