Как ограничить время (iterator.hasNext ()) итераций? - PullRequest
0 голосов
/ 29 апреля 2018

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

Некоторые из R.Es могут генерировать бесконечные строки , я просто хочу обработать их, но пока не могу. Мой код выглядит так:

Generex generex = new Generex(regex);
Iterator iterator = generex.iterator();
    System.out.println("Possible strings against the given Regular Expression;\n");
    while (iterator.hasNext()) {
        System.out.print(iterator.next() + " ");
    }

Если я введу (a) * как регулярное выражение, вывод должен выглядеть следующим образом

a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaa ...

Как мне ограничить результат этого цикла?

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

В вашем случае, я думаю, что длина строки намного важнее, чем количество напечатанных элементов, поэтому я бы сказал, что следующее решение, вероятно, лучше:

Generex generex = new Generex(regex);
Iterator iterator = generex.iterator();
System.out.println("Possible strings against the given Regular Expression;\n");
StringBuilder sb = new StringBuilder();
int limitOfChars = 100; //for example
while (iterator.hasNext()) {
    String next = iterator.next();
    if (sb.length() + next.length() > limitOfChars) break;
    sb.append(next + " ");
}
System.out.println(sb.toString() + " ... ");
0 голосов
/ 29 апреля 2018

Допустим, вы хотите напечатать первые 8 элементов, а затем добавьте "...", если есть еще элементы для печати. Вы можете сделать это следующим образом:

int limit = 8;
int current = 0;
while (iterator.hasNext()) {
    if (current != 0) {
        System.out.print(" ");
    }
    System.out.print(iterator.next());
    // If we reach the limit on the number of items that we print,
    // break out of the loop:
    if (++current == limit) {
        break;
    }
}
// When we exit the loop on break, iterator has more items to offer.
// In this case we should print an additional "..." at the end
if (iterator.hasNext()) {
    System.out.print(" ...");
}
...