сортировать двойники, хранящиеся как строки - PullRequest
2 голосов
/ 02 сентября 2011

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

Ответы [ 5 ]

4 голосов
/ 02 сентября 2011

Нет способа проверить, является ли строка анализируемой или нет, не пытаясь разобрать строку (поскольку любая проверка должна начинаться с попытки интерпретировать строку как число, чтобы сделать это ...).Для проверки на полпути, я думаю, вы могли бы использовать Regex, чтобы проверить, есть ли в строке только цифры и точки.Вы должны будете также использовать блок try ... catch.

Что касается того, как разобрать строку в double, попробуйте это:

double dd;
try {
    dd = Double.parseDouble(string);
}
catch (NumberFormatException e) {
    System.out.println("couldnt not parse the string!");
}
3 голосов
/ 02 сентября 2011

Да. Double.valueOf (String s) выдаст NumberFormatException, если ваша строка не может быть проанализирована в Double, и вернет проанализированный Double в противном случае.

1 голос
/ 02 сентября 2011

Я предполагаю, что вы хотите отсортировать, используя один из встроенных методов сортировки. В этом случае вам нужно будет создать пользовательский Comparator<T>, реализующий compare() и equals(), который пытается проанализировать строки как Double, а при перехвате исключения реализует некоторое нормальное поведение по умолчанию. Убедитесь, что вы перехватили исключение в ваших методах - вы можете столкнуться с проблемами только в том случае, если вы позволите исключениям попасть в код API Java.

В качестве быстрого примера, чтобы вы начали:

class DoubleStringComparator implements Comparator<String> {

    public int compare(String o1, String o2) {
        try {
            double d1 = Double.parse(o1);
            double d2 = Double.parse(d2);
            if d1 > d2 {
                return 1;
            } else if d1 < d2 {
                return -1;
            else {
                return 0;
            }
        } catch (NumberFormatException e) {
            // whatever ordering you want to impose when one string is not a double
        }
    }

    // some definition of equals() - whatever makes sense for your application

}

Затем, когда вы хотите сделать сортировку:

Collections.sort(someListOfString, new DoubleStringComparator());
0 голосов
/ 02 сентября 2011

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

if(num1.matches(("((-|\\+)?[0-9]+(\\.[0-9]+)?)+"))){
    isDoubleVal =true;                  
}else{
    isDoubleVal = false;
}

Надеюсь, это поможет вам.

С уважением, Lav

0 голосов
/ 02 сентября 2011

Посмотрите на parseDouble

http://download.oracle.com/javase/6/docs/api/java/lang/Double.html#parseDouble%28java.lang.String%29

, и да, вы можете поймать NumberFormatException, чтобы определить, когда число было недействительным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...