Как регулярное выражение соответствует неповторяющимся подстрокам в строке? - PullRequest
0 голосов
/ 22 апреля 2019

Есть строка:

"1112344866893334". 

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

"23", "8", "89", "4".

Как я могу это сделать?

Ответы [ 3 ]

0 голосов
/ 22 апреля 2019

Вы можете использовать это, пока вы можете терпеть пустые совпадения:

import java.util.Arrays;

public class HelloWorld
{
  public static void main(String[] args)
  {
    String[] items = "1112344866893334".split("(\\d)\\1+");
    System.out.print(Arrays.toString(items));
  }
}
0 голосов
/ 22 апреля 2019

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

К ним относятся:

  • строка начинается с повторяющихся цифр (например, 111 .....)
  • пустая строка
  • строка содержит только повторяющиеся цифры (например, 1122334455)
  • серия различных повторяющихся цифр (например, 11122233365 ...)
  • серия различных повторов в строке (например, 4311122233398)
      String[] testCases = {
            "2111222333594454555", "333555666540922229789", "", "54", "111",
            "111222333"
      };
      for (String s : testCases) {
         String[] ss = s.replaceAll("(\\d)\\1+", "AA")
                        .replaceAll("^[A]+", "")
                        .split("[A]+");
         System.out.println(Arrays.toString(ss));
      }
   }

Первый replaceAll заменяет все повторяющиеся цифры на AA.Второй удаляет повторяющиеся буквы А с начала строки.Раскол распадается на повторяющиеся буквы А.

0 голосов
/ 22 апреля 2019

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

String input = "1112344866893334";
for (int i=0; i < input.length()-1; ++i) {
    String substring = input.substring(i, i+2);
    String regex = "(?!.*" + substring + ".*" + substring + ").*";
    if (input.matches(regex)) {
        System.out.println("matching substring: " + substring);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...