Если вы не хотите иметь дело с пустыми строками во время разделения, если в начале есть несколько звезд, просто замените звезды в начале, а затем просто разделите.
Пример кода,
public static void main(String[] args) {
String placeStr = "***place1*place2**place3*";
placeStr = placeStr.replaceAll("^[*]+", "");
String[] places = placeStr.split("[*]+");
System.out.println("places.length: " + places.length);
Arrays.asList(places).forEach(System.out::println);
}
Отпечатки,
places.length: 3
place1
place2
place3
Дайте мне знать, если это то, что вы хотели сделать.
Редактирование ответа, чтобы уточнить про разделение:
Учитывая ваш код,
String placeStr="*place1*place2**place3*";
String[] places=placeStr.split("(\\*)+");
System.out.println("array size: " + places.length);
Вы получите,
array size: 4
, потому что первая звезда в строке расщепляется и дает пустую строку.Но если вы удалите все звезды в начале строки и сделаете свой код следующим образом,
String placeStr="place1*place2**place3*";
String[] places=placeStr.split("(\\*)+");
System.out.println("array size: " + places.length);
Тогда будет выведен размер массива как,
array size: 3
Последняя звезда (s)) (или любые символы) в строке не ведут себя как первые символы, и после разбиения они не дают пустую строку в последних элементах массива.
Вот как происходит разбиение строки с помощью регулярного выраженияработает в Java.Дайте мне знать, если у вас было какое-то другое ожидание, возможно, из-за того, что вы говорите, что оно дает вам неправильный вывод.
Надеюсь, это прояснится.
Кроме того, вы можете сообщить мне, что выхочешь добиться логически?