Вопрос по string, java, parsing – Android разбирает строки отрицательных чисел

3

Как разобрать строки с отрицательными числами?

Строки могут иметь форму:

-123.23  
(123.23)  
123.23-

Есть ли класс, который преобразует любую из приведенных выше строк в число?

если нет, каков наилучший способ сделать это?

да, отрицательные числа (в финансовых вопросах) могут быть представлены следующим образом: -123.23 (123.23) 123.23 - я видел, что европейцы написали это как & lt; 123.23 & gt; checkout libreoffice calc, он с радостью примет все вышеперечисленное. quiricada
Есть ли возможность (-123.12) или (123.12-)? FabianCook
как вы относитесь? (-123.12) или (123.12-) они анализируются как двойной отрицательный, следовательно, положительный? quiricada
Подождите () означает отрицательный? FabianCook

Ваш Ответ

3   ответа
0

пожалуйста, прокомментируйте улучшения и т.д., время, чтобы узнать больше сам :)

private Double RegNumber(String sIn) {
        Double result = 0E0;
        Pattern p = Pattern.compile("^\\-?([0-9]{0,3}(\\,?[0-9]{3})*(\\.?[0-9]*))");   // -1,123.11
        Matcher m = p.matcher(sIn);
        if (m.matches()) {
            result = Double.valueOf(sIn);
        } else {
            Pattern p1 = Pattern.compile("^\\(?([0-9]{0,3}(\\,?[0-9]{3})*(\\.?[0-9]*))\\)?$");  // (1,123.22)
            Matcher m1 = p1.matcher(sIn);
            if (m1.matches()) {
                String x[] = sIn.split("(\\({1})|(\\){1})"); // extract number
                result = Double.valueOf("-" + x[1]);
            } else {
                Pattern p2 = Pattern.compile("([0-9]{0,3}(\\,?[0-9]{3})*(\\.?[0-9]*))\\-$");  // 1,123.22-
                Matcher m2 = p2.matcher(sIn);
                if (m2.matches()) {
                    String x[] = sIn.split("(\\-{1})"); // extract number
                    result = Double.valueOf("-" + x[0]);
                } else {
                    result = 99999999E99;  // error, big value
                }
            }
        }
        return result;
    }
4

"-123.23" можно разобрать сFloat.valueOf("-123.23"); или жеDouble.valueOf("-123.23");

"(123.23)" а также"123.23-" недействительны и должны быть улучшены / проанализированы самостоятельно. Вы можете пошагово просмотреть строку и проверить, является ли это число, если это так, добавить его в новую строку. Если вы найдете - в начале или в конце, сделайте это, чем отрицательный ...

Построен на ваш комментарий выше: D
вот взлом, пожалуйста, прокомментируйте улучшения и т.д., время, чтобы узнать больше сам :) quiricada
5

Double newNumber = 0;
if(number.charAt(i).isDigit()){
     //parse numeber here using WarrenFaiths method and place the int or float or double 
     newNumber = Double.valueOf(number);
}else{
    Boolean negative = false;

    if(number.startsWith("-") || number.endsWith("-")){
         number = number.replace("-", "");
         negative = true;
    }
    if(number.startsWith("(") || number.endsWith(")"){
        number = number.replace("(", "");
        number = number.replace(")", "");
    }

    //parse numeber here using WarrenFaiths method and place the float or double 
    newNumber = Double.valueOf(number);

    if(negative){
      newNumber = newNumber * -1;
    }
}

Извините, если методы замены неправильные, пожалуйста, исправьте меня.

Мы можем усложнить это еще больше, если захотим: P, Regex не похоже на то, что этот человек еще хочет использовать, это должно сработать для него :)
Да, меньше вычислений, я добавлю это в.
Я надеялся, что есть универсальный класс для решения этой проблемы, java используется большой корпорацией, и используются отрицательные числа в скобках или постфиксный отрицательный знак. регулярное выражение и если заявления должны будут сделать. большое спасибо. quiricada
Вместо содержимого я использовал бы начальные и конечные значения.
Я бы предложил более пуленепробиваемый способ: просто примите цифры, +/- и символы ./ и отбросьте все остальное. Итак, используяnumberString.charAt(i).isDigit() может быть начало :). Регулярные выражения также могут исключать неиспользуемые символы.

Похожие вопросы