Можно ли сравнить строки, которые являются числами, как если бы они были числами? - PullRequest
2 голосов
/ 28 января 2012

Есть ли какая-нибудь библиотека, в которой есть что-то вроде:

public static String Min(String first, String second)

Если вы передадите ей "200" / "300", она вернет, например, "200"?

Я знаю, что есть миллион способов написать свой собственный, поэтому я действительно не ищу там помощи - просто надеюсь выяснить, это колесо, которое кто-то другой уже изобрел.

Спасибо взаранее!

Ответы [ 6 ]

5 голосов
/ 28 января 2012

Хак, часто используемый в соревнованиях по программированию при отсутствии лидирующих нулей, - сначала сравнить длины строк;если длины не равны, выигрывает более длинная строка;в противном случае верните результат лексикографического сравнения строк.

РЕДАКТИРОВАТЬ : Поскольку вы в основном заботитесь о возможности повторного использования своего решения, вы получите самый большой «удар за доллар», еслиВы реализуете свой собственный Comparator .Это позволит вам повторно использовать ту же реализацию со стандартными классами Java.Например, вы сможете использовать свой компаратор с отсортированными картами, выполнять сортировку по массиву и списку, выполнять бинарный поиск и т. Д.

3 голосов
/ 28 января 2012

Используйте Integer.parseInt() для каждого и сравните это значение, например:

Integer.parseInt(first) > Integer.parseInt(second)

Имейте в виду, если строка не допустимое целое число, это выдает NumberFormatException, так что обязательно учтите это.

2 голосов
/ 28 января 2012

Ну, преобразуйте их в числа, используя Integer.parseInt(String str) и сравните числа :) Не очень большое колесо для изобретения;)

1 голос
/ 28 января 2012

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

Там должен быть шагом где-то, который преобразует строки в числа.Это шаг проверки, который проверяет строку в случае, если она не является допустимым числом.Это совершенно отличная функция от функции сравнения с действительными числами.Объединение двух операций в одну сделает так, чтобы эти функции выполняли больше работы, чем должны, и явно нарушают принцип единой ответственности.

Я не уверен, почему вы хотите работать со строками как числами - предположительно потому, что входящие строки предоставляются пользователем.Поэтому вы должны проверить эти входные данные отдельно, а затем преобразовать их в числа, после чего вам будут доступны обычные математические функции.

1 голос
/ 28 января 2012

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

0 голосов
/ 28 января 2012

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

...