Сохранять части разбиения строки даже там, где нет значений - PullRequest
2 голосов
/ 23 июня 2019

Я хочу разбить строки слов на букву А. Например: AoAoAoA должен привести к [o, o, o], что происходит с моим кодом. Но проблема в том, что в слове нет символов между двумя буквами A, например: AoAA, что приведет только к [o]. Как я могу настроить свой код так, чтобы результат был [o,] вместо этого?

Это потому, что я хочу увидеть, есть ли одинаковое количество одинаковых символов между разделителем. И если таковые будут, то что-то случится, а если нет, то случится что-то еще. «AoAA» не имеет равных количеств «o» между A и поэтому должно рассматриваться как таковое.

List<String> myList = new ArrayList <>();
String row = scanner.nextLine();
String [] splitString = row.split ("A");

for (String s : splitString) {
if (!s.equals(splitString[0])) {
myList.add(s);
}}

пс. Я понимаю, что мои вопросы кажутся дублирующими, я пробовал несколько решений, похожих на мою проблему, но по какой-то причине они не решают мою проблему. Например, простое добавление split (string, int) ничего не решило для меня.

Ответы [ 2 ]

0 голосов
/ 23 июня 2019

Используйте split(String, int) версию split():

List<String> myList = Array.asList(input.replaceAll("^A*", "").split("A", -1));

Согласно документу Javadoc:

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

0 голосов
/ 23 июня 2019

Один из способов, который я могу придумать, - это сначала удалить все ведущие или конечные A с до того, как вы на самом деле разделите строку:

String[] result = input.replaceAll("^A|A$", "")
                       .split("A", -1);

Это потому, что это ведущие и конечные буквы Авызывая пустые расщепления на двух концах строки.Если мы сначала удалим эти буквы «А», то не получим ни одного нежелательного разделения.

...