Первое, что я хотел бы предложить, это разбить эту строку на более легкие в управлении разделы, подобные этому:
String s = "x1x1x1x1a1a1x1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1a1";
String[] splitS = s.split("1");
//Contents of the array are: [x, x, x, x, a, a, x, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a, a]
//We can now loop through each string in the string array and count how many we have of what
ArrayList<String> values = new ArrayList<String>();
int start = 0, end = 0, grandCounter = 0;
String current = splitS[0];
for(int i = 1; i < splitS.length-1; i++){
if(!splitS[i].equals("x") && current.equals("x")){
end = i;
values.add("x" + (end - start));
grandCounter += (end-start);
start = end;
end = 0;
current = "a";
} else if(!splitS[i].equals("a") && current.equals("a")){
end = i;
values.add("a" + (end - start));
start = end;
end = 0;
current = "x";
grandCounter += (end-start);
}
}
values.add( "a" + (splitS.length-grandCounter) + "");
System.out.println(values.toString().replace("[", "").replace(",", "").replace("]", "").replace(" ", ""));
Приведенный выше код в точности вернул следующее, когда было сказано печатать в консоли: x4a2x1a58
Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы или проблемы с вашей работой!