Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Java > Как "быстро" меньшим кол-вом строк кода узнать что в строке одни нули? |
Автор: RusSun 13.04.17, 17:47 |
Дорое время суток) Как быстро узнать что в строке одни нули? В delphi так <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> function TestStringsForZeros(const Source: string): Boolean; begin Result:= Source = StringOfChar('0', Length(Source)); end; В python так <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> def TestStringsForZeros(s): return s == '0'*len(s) Вопрос: "Каким будет "данный код" в java или эквивалентный ему?" Заранее спасибо. |
Автор: wind 13.04.17, 22:34 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> return string.chars().allMatch(symbol -> symbol == '0'); |
Автор: MBo 14.04.17, 02:34 |
>В delphi так Двойная работа, чтобы "быстро узнать" ???? |
Автор: Cfon 14.04.17, 05:47 |
Цитата RusSun @ Дорое время суток) Как быстро узнать что в строке одни нули? Скрытый текст В delphi так <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> function TestStringsForZeros(const Source: string): Boolean; begin Result:= Source = StringOfChar('0', Length(Source)); end; В python так <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> def TestStringsForZeros(s): return s == '0'*len(s) Вопрос: "Каким будет "данный код" в java или эквивалентный ему?" Заранее спасибо. ну так можно также по типу того что ты написал сделать и на жаве |
Автор: Serafim 20.04.17, 23:35 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Integer.parseInt("....") == 0 ![]() Добавлено ну или через valueOf |
Автор: Cfon 21.04.17, 02:31 |
ТС хотел знать можно ли как в питоне или Делфи, вроде в жаве нет функции типа StringOfChar? |
Автор: Vesper 21.04.17, 08:01 |
Цитата Serafim @ <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Integer.parseInt("....") == 0 ![]() Добавлено ну или через valueOf А если в строке Кстати, а если входная строка - пустая (""), ответ должен быть true или false? |
Автор: Астарот 21.04.17, 08:23 |
Цитата wind @ <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> return string.chars().allMatch(symbol -> symbol == '0'); При пустой строке тоже вернет true. |
Автор: VisualProg 26.04.17, 09:58 |
Судя по всему, ТС любитель ![]() Хм, не знаю зачем я это делаю, но набросаю пару рабочих примеров в духе ТС на яве: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> boolean TestStringsForZeros(String str) { return str.length()==Strings.count(str, '0'); } <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> boolean TestStringsForZeros(String str) { return str.equals(Strings.pad('0', str.length())); } И да, попрошу заметить, я НЕ рекомендую их где либо применять ![]() Добавлено Всё там есть) |
Автор: Cfon 26.04.17, 15:34 |
Цитата VisualProg @ А какое стандартное? Может в цикле искать нулевой символ? ![]() |
Автор: MBo 26.04.17, 15:45 |
Cfon Приведённые решения по сути: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Мы хотим узнать, кончилась ли водка. Для этого мы пересчитываем бутылки в ящике. Приобретаем новый ящик такой же емкости. Заполняем его заведомо пустыми бутылками в том же количестве. Теперь сравниваем, что каждая бутылка из первого такая же, как и соответствующая бутылка во втором. |
Автор: Cfon 26.04.17, 18:52 |
Цитата MBo @ Мда не оптимально, тогда лучше таки вцикле искать нулевой символ ![]() |
Автор: VisualProg 27.04.17, 06:22 |
справедливости ради, попрошу заметить, что первый предложенный вариант: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> boolean TestStringsForZeros(String str) { return str.length()==Strings.count(str, '0'); } не создаёт нового ящика, а считает пустые бутылки, и сравнивает их с общим числом бутылок в ящике, но, не факт что это правильное решение. Если вдаваться в детали и гнаться за скоростью: http://grepcode.com/file/repository.grepco....hashCode%28%29 В этой конечной сумме ряда val[off++], для нашего случая, всегда равен фиксированному числу. Чисто теоретически, можно собрать формулу для эквивалентного хешкода строки из n одинаковых символов. Ну, это ИМХО, сам не пробовал, но, с большой долей вероятности, будет работать как надо. (хотя, в первый расчёт хеша, скорость будет ещё хуже чем при проходе в цикле, но, в яве хешкод объёкта считать придётся в подавляющем большинстве случаев, если не отказываться от коллекций или сортировок) |
Автор: Gonarh 27.04.17, 08:48 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> if ($foo =~ /^0+$/) { print "only zeros"; } |
Автор: VisualProg 27.04.17, 09:02 |
Хм... но, в яве нет таких операторов и команд ![]() |
Автор: Gonarh 27.04.17, 09:56 |
Тьху чорд, тут жеж жабисты |
Автор: korvin 30.04.17, 20:08 |
Фикс очевиден. |