Autor Tema: split Java separar cadena de caracteres contar número de dígitos en posición x  (Leído 959 veces)

NAKER

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Hola buenas ;D, necesito crear un programa en Java que dada esta entrada:

,12,34,56,78,34,23,45,567,3452,43246

Proporcione la siguiente salida:

~~ Posicion 1
  numero: 1 cantidad: 1
  numero: 2 cantidad: 1
  numero: 3 cantidad: 3
  numero: 4 cantidad: 2
  numero: 5 cantidad: 2
  numero: 7 cantidad: 1

~~ Posicion 2
  numero: 2 cantidad: 1
  numero: 3 cantidad: 2
  numero: 4 cantidad: 3
  numero: 5 cantidad: 1
  numero: 6 cantidad: 2
  numero: 8 cantidad: 1

~~ Posicion 3
  numero: 2 cantidad: 1
  numero: 5 cantidad: 1
  numero: 7 cantidad: 1

~~ Posicion 4
  numero: 2 cantidad: 1
  numero: 4 cantidad: 1

~~ Posicion 5
  numero: 6 cantidad: 1

Es decir, contabilice los números que hay en cada posición, no hace falta que la salida sea idéntica a esa mientras cumpla su función.

Yo había desarrollado por mi mismo este código que contabiliza solo el primer dígito.

Código: [Seleccionar]
package cadena;

import java.util.Scanner;

public class cadena {
public static void main(String[] args) {
int digitos1 = 0;
int digitos2 = 0;
int digitos3 = 0;
int digitos4 = 0;
int digitos5 = 0;
int digitos6 = 0;
int digitos7 = 0;
int digitos8 = 0;
int digitos9 = 0;
String cadena =",12,34,56,78,34,23,45,567,3452,43246"
                   for (int i = 0; i < cadena2.length(); i++) {
if (cadena2.charAt(i) == ',') {
i++; // Pasamos al siguiente carácter
char digito = cadena2.charAt(i);
switch (digito) {
case '1':
digitos1++;
break;
case '2':
digitos2++;
break;
case '3':
digitos3++;
break;
case '4':
digitos4++;
break;
case '5':
digitos5++;
break;
case '6':
digitos6++;
break;
case '7':
digitos7++;
break;
case '8':
digitos8++;
break;
case '9':
digitos9++;
break;
}
}
}
System.out.println("1-" + digitos1 + " 2-" + digitos2 + " 3-" + digitos3 + " 4-" + digitos4 + " 5-"
+ digitos5 + " 6-" + digitos6 + " 7-" + digitos7 + " 8-" + digitos8 + " 9-" + digitos9);

}
}

Además ya pregunté por otro foro y me dijeron esto por si sirve de ayuda. Muchas gracias de antemano.

"Te conviene usar split para separar los numeros que tienes
Te conviene tener una matriz bidimensional, count[][]
la primera dimension tan larga como el mas largo de los numeros, la segunda dimension de largo 10 (o al reves).

Con split tendras un arreglo de strings.
Recorres el arreglo, por cada iteracion estaras revisando 1 string. Te saltas los strings vacios.
Otro ciclo adentro para visitar cada uno de los caracteres de ese string.
El indice de ese ciclo sera el primer indices de la matriz. El segundo indice sera el numero que lees (el caracter) y le restas '0', incrementas ese valor especifico de la matriz.

Finalmente la matriz tendra los valores que buscas, en la posicion count[j] tendras los numeros j que aparecieron en la posicion i (le sumas 1 para que se vea de 1 en adelante)."
« Última modificación: 17 de Enero 2021, 19:45 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 724
    • Ver Perfil
Re:Ayuda con cadena de caracteres en Java
« Respuesta #1 en: 16 de Octubre 2020, 14:15 »
Eemm.. pues no termino de entender el propósito a cumplir...supongo que la salida que has puesto de ejemplo, son datos al azar y no tienen que ver con la cadena propuesta.., porque no veo la relación entre ambos...

A ver, supongamos que la cadena es mucho más sencilla:

Código: [Seleccionar]
String cadena =",12,34";
¿Que salida deberíamos tener?
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

NAKER

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Ayuda con cadena de caracteres en Java
« Respuesta #2 en: 16 de Octubre 2020, 15:53 »
Primer Dígito
1- 1
2- 0
3- 1
4- 0

Segundo Dígito
1- 0
2- 1
3- 0
4- 1

Lo entiendes ahora? Es contabilizar cuantos 1 cuantos 2 cuantos 3...hay en cada posición: primer dígito, segundo dígito...

daenius

  • Sin experiencia
  • *
  • Mensajes: 24
    • Ver Perfil
Re:Ayuda con cadena de caracteres en Java
« Respuesta #3 en: 16 de Octubre 2020, 16:39 »
Yo lo he entendido pero igual es tonta la pregunta, ¿la cadena de números debe comenzar por esa coma? ¿Se le pide al usuario por consola? ¿Es a través de un fichero?

NAKER

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Ayuda con cadena de caracteres en Java
« Respuesta #4 en: 16 de Octubre 2020, 18:47 »
Sí, la cadena empieza por esa coma y está incluida en el mismo código tal y como muestro en el mío. ;)

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 724
    • Ver Perfil
Re:Ayuda con cadena de caracteres en Java
« Respuesta #5 en: 16 de Octubre 2020, 20:01 »
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:
Código: [Seleccionar]
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]);
}
}

}

}
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

NAKER

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Re:Ayuda con cadena de caracteres en Java
« Respuesta #6 en: 16 de Octubre 2020, 20:29 »
Dios mío no sabes cuanto tiempo llevo esperando a que alguien me ayudase de esta forma :'( y al final todos se cansaban de ayudar. Si lo he entendido todo y el código me va a ser super super útil. Muchísimas gracias de verdad :DDDDDDDDDDDD <3.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".