Разбейте произвольное количество специальных символов в регулярном выражении и укажите размер массива - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть строка s, в которой * может быть произвольным числом.Шаблон регулярного выражения, который я использую, не разбивается в начале.Я не хочу делать String.substring () для удаления * в начале.Может быть, у меня что-то вроде "***place1*place2**place3*".Или что-то вроде placeStr=**

 String placeStr="*place1*place2**place3*";
 String[] places=placeStr.split("(\\*)+");
 System.out.println("array size" + places.length);

Также при использовании String.split("(\\*)+") для удаления placeStr=** дает неправильный размер массива, если входная строка имеет вид, подобный ***.В этом случае я получаю размер массива как единое целое.Но я ожидаю, что размер массива будет нулевым, так как внутри массива нет мест.То, что я хочу сосчитать, это количество мест.

1 Ответ

0 голосов
/ 26 ноября 2018

Если вы не хотите иметь дело с пустыми строками во время разделения, если в начале есть несколько звезд, просто замените звезды в начале, а затем просто разделите.

Пример кода,

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.Дайте мне знать, если у вас было какое-то другое ожидание, возможно, из-за того, что вы говорите, что оно дает вам неправильный вывод.

Надеюсь, это прояснится.

Кроме того, вы можете сообщить мне, что выхочешь добиться логически?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...