Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.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
:lol:

Добавлено
ну или через valueOf

Автор: Cfon 21.04.17, 02:31
ТС хотел знать можно ли как в питоне или Делфи, вроде в жаве нет функции типа StringOfChar?

Автор: Vesper 21.04.17, 08:01
Цитата Serafim @
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    Integer.parseInt("....") == 0
:lol:

Добавлено
ну или через valueOf

А если в строке "0.0e1"? Или тупо "-0"? Баги плодите, сэр! (edit: там parseint, а не parsefloat)

Кстати, а если входная строка - пустая (""), ответ должен быть 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
Судя по всему, ТС любитель изв... нестандартных решений :crazy:

Хм, не знаю зачем я это делаю, но набросаю пару рабочих примеров в духе ТС на яве:

<{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()));
        }


И да, попрошу заметить, я НЕ рекомендую их где либо применять :lool:

Добавлено
Цитата Cfon @
вроде в жаве нет функции типа StringOfChar?

Всё там есть)

Автор: 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
Хм... но, в яве нет таких операторов и команд :D

Автор: Gonarh 27.04.17, 09:56
Тьху чорд, тут жеж жабисты

Автор: korvin 30.04.17, 20:08
Цитата Астарот @
При пустой строке тоже вернет true.

Фикс очевиден.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)