Если я правильно понял, вы хотите разделить символы в строке так, чтобы одинаково-последовательные символы оставались вместе.Если это так, вот как я бы это сделал:
public static ArrayList<String> splitString(String str) {
ArrayList<String> output = new ArrayList<>();
String combo = "";
//iterates through all the characters in the input
for(char c: str.toCharArray()) {
//check if the current char is equal to the last added char
if(combo.length() > 0 && c != combo.charAt(combo.length() - 1)) {
output.add(combo);
combo = "";
}
combo += c;
}
output.add(combo); //adds the last character
return output;
}
Обратите внимание, что вместо использования массива (имеет фиксированный размер) для хранения вывода, я использовал ArrayList
,который имеет переменный размер.Также обратите внимание, что это список строк (хранит строки), а не символы.Причина этого заключается в том, что если бы это был список символов, я бы не смог сохранить более одного символа в одном и том же индексе.
В каждой итерации цикла я проверяю равенство между текущимхарактер и это подряд.Переменная combo
используется для временного хранения символов (в строке), прежде чем они перейдут к output
.
Теперь, чтобы распечатать результаты понятным способом:
public static void main(String[] args)
{
String input = "EEEE BCD DdA";
ArrayList<String> output = splitString(input);
System.out.print("[");
for(int i = 0; i < output.size(); i++) {
System.out.print("\"" + output.get(i) + "\"");
if(i != output.size()-1)
System.out.print(", ");
}
System.out.println("]");
}
Вывод при запуске вышеуказанного кода будет:
["EEEE", " ", "B", "C", "D", " ", "D", "d", "A"]