Ваше регулярное выражение соответствует либо началу строки, либо ^
(захватывая это в группу 1), а затем любым 0+ символам, отличным от ^
, в группу 2. Когда найдено первое совпадение (начало строки ), первая группа содержит пустую строку (так как это начало строки), а группа 2 также содержит пустую строку (так как первый символ равен ^
, а [^^]*
может соответствовать пустой строке перед несоответствующим символом Все совпадение имеет нулевую длину, и механизм регулярных выражений перемещает индекс регулярного выражения в следующую позицию. Таким образом, после первого совпадения индекс регулярного выражения перемещается из начала строки в позицию после первого ^
. Затем найдено второе совпадение, второе ^
и пустая строка после него, следовательно, первое ^
не сопоставлено, оно пропущено.
Решение простое split
:
String[] result = string.split("\\^", -1);
Второй аргумент заставляет метод выводить все пустые совпадения в конце полученного массива.
См. Демонстрационную версию Java :
String str = "^^^^";
String[] result = str.split("\\^", -1);
System.out.println("Number of items: " + result.length);
for (String s: result) {
System.out.println("\"" + s+ "\"");
}
Выход:
Number of items: 5
""
""
""
""
""