Разделение строки вокруг последовательностей символов в java

Как я могу разбить строку в Java вокруг последовательностей символов, кратных определенному числу? Пример: у меня есть двоичная строка

101010100010000001110101110111

и я хочу разбить его на последовательности из нуля, кратные 3, т.е. он должен возвращать

[1010101, 1, 1110101110111]

(он должен принимать последовательности регулярных выражений из нуля, которые делятся на 3, в данном случае 000 и 000000)

Я пробовал с split("[0{3}]+"), но он не работает.

Найдите нужную подстроку, получите индекс, оттуда разбейте.

yassadi 11.04.2018 13:24

Когда вы говорите «кратное 3», вы имеете в виду ровно 3 или как минимум 3?

musefan 11.04.2018 13:25

не могли бы вы объяснить логику еще немного ...

shahaf 11.04.2018 13:25

зачем тогда у тебя 1? если вам нужно число, кратное 3?

Danyal Sandeelo 11.04.2018 13:25

минимум 3, затем 6, 9, 12 и т. д. @musefan

Joey 11.04.2018 13:26

@Joey: Что, если у вас 4 нуля? Так, например, 11000100001 ... что будет на выходе?

musefan 11.04.2018 13:26

в этом случае он разделит только около 000: [11, 100001] @musefan

Joey 11.04.2018 13:29

@Joey: Обновите свой вопрос этой информацией, поскольку я думаю, что люди, которые отвечают, смущены вашими требованиями.

musefan 11.04.2018 13:34
0
8
52
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Думаю, split("(0{3})+") должен решить эту проблему. Включение чего-либо между [] означает, что вы пытаетесь найти определенные символы, которые находятся в этом блоке.

ОБНОВИТЬ

Если мы хотим, чтобы в комментариях было желаемое, это должно быть так: split("(?<!0)(0{3})+(?!(0{1,2}))"). Это немного сложнее, но должно дать желаемый результат.

Допустим, у нас есть входной сигнал 100001. Деталь (?<!0) будет следить за тем, чтобы в начале никогда не было 0, иначе результаты могут выглядеть как [10, 1]. И (?!(0{1,2})) проверяет, остались ли 1 или 2 0.

Это даст [100001] с заданным входом. При вводе 1000100001 это приведет к [1, 100001]

Я считаю, что OP хочет разделить Только, если количество нулей кратно 3. Итак, если есть 4 нуля, он не должен разделяться, но 3, 6, 9 и т. Д. Должны разделиться

musefan 11.04.2018 13:38

@musefan Я обновил свой ответ. Из того, что я могу прочитать, это должно быть желаемое решение

Albert Bos 11.04.2018 13:47

Пытаться

class Scratch {
    public static void main(String[] args) {
        String s = "101010100010000001110101110111";

        for (String el : s.split("(0{3})+")) {
            System.out.println(el);
        }

    }
}

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

Это очень мощный инструмент. Практически сам язык.

В твоем случае:

s.split ("0 {3,}")

Увидимся.

Дэйвид.

Пытаться

String str = "101010100010000001110101110111";
String[] strArray = str.split("(0{3})+");
System.out.println(Arrays.toString(strArray));

Другие вопросы по теме