Vaaale, ahora lo pillo.
Efectivamente con split() y una matriz de enteros para usar como contadores, se puede hacer, pero de otra forma distinta a la que te explicaron, que creo es más fácil o al menos suena más lógica.
A la hora de analizar digitos, primero elegimos una posición, y luego recorremos todas las cadenas que nos ha dado el split(), analizando que dígito encontramos en esa posición.
Es decir, empezamos por la posición 0.
Pues a cada cadena, preguntamos que tiene en 0.
Y en la matriz, incrementamos contador, según la posición y el dígito encontrado
Si encontramos un '1'.
Pues en matriz[0][1] incrementamos el contador.
Cuando encontramos un '5', se incrementa matriz[0][5]
Etc...
Luego pasamos a posición 1, y repetimos el mismo proceso.
Que se encuentra un '8',.., pues se incrementará matriz[1][8]
Siempre previamente comprobando que el valor que toca analizar, tiene longitud suficiente para consultar la posición actual.
Dejo un código con varios comentarios explicando cada línea, a ver si se entiende bien, porque si es un pelín engorroso el proceso si no se está acostumbrado a trabajar con matrices.
Cualquier duda, preguntad:
public class Digitos {
public static void main(String[] args) {
//Cadena de digitos para analizar
String cadena =",12,34,56,78,34,23,45,567,3452,43246";
//Separamos los digitos de esta cadena, en varias cadenas agrupadas en array
String[] valores = cadena.split(",");
/*
* Usaremos una matriz para contar las repeticiones de digitos
* en cada posición. Pero antes tenemos que averiguar cuantas posiciones
* habrán. Esto depende de cuánto mide la cadena más larga, así que
* vamos a recorrer todas las cadenas y averiguar la longitud mayor.
*/
int mayor = 0;
for (String valor: valores)
if (valor.length() > mayor)
mayor = valor.length();
/*
* Tenemos la longitud mayor. Podemos crear la matriz.
* La primera dimensión la indica la longitud mayor, es decir,
* cuántas posiciones vamos a evaluar.
* La segunda dimensión será el valor 10, porque cada posición
* puede contener 10 posibles digitos (0 a 9)
*/
int[][] repeticiones = new int[mayor][10];
/*
* Ahora recorremos cada posición de cada cadena, con bucles anidados,
* teniendo en cuenta que no todas las cadenas miden lo mismo
* y algunas tendrán posiciones que otras no tienen.
* Evaluaremos el digito encontrado en cada posición y lo contaremos
* en el espacio adecuado de la matriz.
*/
for (int posicion = 0; posicion < mayor; posicion++) {
for (String valor: valores) {
/*
* Primero comprobamos si la posición actual
* está dentro del rango de tamaño de este valor
*/
if (posicion < valor.length()) {
switch (valor.charAt(posicion)) {
case '0'://Incrementamos contador e matriz, según la posicion y digito
repeticiones[posicion][0]++;
break;
case '1':
repeticiones[posicion][1]++;
break;
case '2':
repeticiones[posicion][2]++;
break;
case '3':
repeticiones[posicion][3]++;
break;
case '4':
repeticiones[posicion][4]++;
break;
case '5':
repeticiones[posicion][5]++;
break;
case '6':
repeticiones[posicion][6]++;
break;
case '7':
repeticiones[posicion][7]++;
break;
case '8':
repeticiones[posicion][8]++;
break;
case '9':
repeticiones[posicion][9]++;
break;
}
}
}
//Ya se han analizado todos los valores en esta posición.
//Se repite mismo proceso, en la siguiente posición
}
/*
* Ya se han recorrido todos los valores de la cadena de números
* y tenemos la repetición de cada digito en cada posición.
* Recorremos la matriz para mostrar resultados.
*/
for (int posicion = 0; posicion < repeticiones.length; posicion++) {
System.out.println("\nPosicion " + (posicion + 1));
for (int digito = 0; digito < 10; digito++)
if (repeticiones[posicion][digito] > 0) {
System.out.print("Número: " + digito);
System.out.println(" -- Cantidad: " + repeticiones[posicion][digito]);
}
}
}
}