Как разобрать строку, содержащую отрицательное число по j2me api? - PullRequest
8 голосов
/ 02 февраля 2012

У меня есть строка с числами. Я должен разобрать эту строку и сохранить эти числа в int, float и т. Д. Соответственно

String str = "100,2.0,-100,19.99,0";

Я могу сделать это на Integer.parseInt() и Float.parseFloat() после разделения. Но я не могу сделать это для отрицательного числа. Выдает исключение java.lang.NumberFormatException. После поиска в Интернете я не мог найти решение этой проблемы.

Так как же я могу разобрать отрицательное целое число из строки и сохранить в int с помощью набора j2me api?

Ответы [ 5 ]

17 голосов
/ 02 февраля 2012

Не должно быть ничего особенного в разборе отрицательных чисел по сравнению с положительными числами.

float f = Float.parseFloat("-1.0");

Приведенный выше код должен прекрасно работать.

Что может быть неправильным в вашем коде, так это то, что вы пытаетесь проанализировать число с плавающей точкой с неправильным десятичным разделителем. Если ваша локаль имеет . в качестве десятичного разделителя, приведенный выше код в порядке. Однако, если в вашей локали в качестве десятичного разделителя используется ,, синтаксический анализ завершится неудачно (с NumberFormatException).

Поэтому убедитесь, что оригинал разделен правильно, и что каждая из частей после разделения имеет допустимый формат (например, с правильным десятичным разделителем).

Обновление:
Если вы хотите знать, как анализировать число с использованием определенной локали, вы можете, например, посмотреть этот вопрос .

2 голосов
/ 23 марта 2013

У меня была похожая проблема сегодня, и проблема заключалась в том, что знак минус во входной строке был на самом деле символом тире. Это было противно! Так что это определенно стоит проверить.

1 голос
/ 02 февраля 2012

Уточнение: я подумал, что вы хотите различить int и float. Просто Float.parseFloat(..) тоже подойдет, Не надо contains проверить. :) Неправильно!

    String str = "100,2.0,-100,19.99,0";
    String[] ns = str.split(",");
    for(String s: ns){
        if(s.contains("."))
            System.out.println("Float: "+ Float.parseFloat(s));
        else
            System.out.println("Int: "+ Integer.parseInt(s));
    }

выход

Int: 100
Float: 2.0
Int: -100
Float: 19.99
Int: 0

Обновление , так что это:

    String str = "100,2.0,-100,19.99,0";
    String[] ns = str.split(",");
    for(String s: ns)
            System.out.println("Float: "+ Float.parseFloat(s));

тоже работает.

0 голосов
/ 16 ноября 2012

Вы можете разделить на разделитель ',' и проверить наличие отрицательного знака, поэтому умножьте число на -1 или сделайте это на

Float parseFloat(str);

Это будет работать правильно.

0 голосов
/ 02 февраля 2012

Это странно, возможно, проблема с кодировкой.Integer.parseInt () должен работать с положительными и отрицательными числами, а также с другими подобными методами (Float.parse ...).То, что вы можете сделать, это всегда проверять наличие знака «-» или «+» перед анализом и назначать знак после разбора.Этот метод имеет свои преимущества, как если бы вы получили число со знаком «+», стандартный Integer.parseInt не будет работать.

...