Java - Ayuda JAVA (extraer la cadena sin coincidencias)

 
Vista:

Ayuda JAVA (extraer la cadena sin coincidencias)

Publicado por Hector (2 intervenciones) el 29/11/2018 14:44:39
Hola buenas tardes. Estoy atascado en un código que quiero hacer y ni siquiera se si es posible hacer el algoritmo como quiero o no. Os comento intento hacer un método que tu le pases por parámetros una cadena y que te devuelva una nueva cadena sin las coincidencias. Ejemplo yo le paso por parámetros "PARAPETAR" y la cadena que devolvería el método seria "ET" eliminando así cualquier letra que se repitiera mas de una vez. para ello debo de utilizar bucles y sentencias condicionales y no puedo usar ni arrays ni algoritmos de ordenación.

Mi idea era recorrer la cadena extrayendo las coincidencias y acoplándolas en un nuevo string, y luego comparar la cadena introducida con la cadena con las coincidencias para quedarme solo con las letras que no se repitieran.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public static String sinCoincidencias(String s) {
        assert s != null : "Error: el string introducido no puede ser null";
/*de momento nuestro profesor no nos ha enseñado a lanzar excepciones así que validamos parámetros con asserts*/
 
        String palabra = "";
        String aux = "";
 
        if (s.isEmpty()) {
            return palabra;
        }
 
 
        for (int i = 0; i < s.length(); i++) {
            for (int j = 0; j < s.length(); j++) {
                if (i != j) {
                    if (s.charAt(i) == s.charAt(j)) {
                        aux += s.charAt(j);
                        break;
                    }
                }
            }
        }
 
//AQUI FALTARIA EL ALGORIMO QUE NO CONSIGO SACAR.
 
        return palabra;
    }
 
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda JAVA (extraer la cadena sin coincidencias)

Publicado por Hector (2 intervenciones) el 29/11/2018 15:17:22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static String sinCoincidencias(String s) {
    assert s != null : "Error: el string introducido no puede ser null";
 
    String palabra = "";
    String aux = "";
    String result = "";
 
 
    if (s.isEmpty()) {
        return palabra;
    }
 
 
    for (int i = 0; i < s.length(); i++) {
        for (int j = 0; j < s.length(); j++) {
            if (i != j) {
                if (s.charAt(i) == s.charAt(j)) {
                    aux += s.charAt(j);
                    break;
                }
            }
        }
    }
 
    for (int i = 0; i < s.length(); i++) {
        if (!aux.contains("" + s.charAt(i))) {
            result += "" + s.charAt(i);
        }
    }
 
 
    return result;
}

//Lo he conseguido, tenia la solucion en mis manos pero estaba bloqueado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Billy Joel
Val: 2.665
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda JAVA (extraer la cadena sin coincidencias)

Publicado por Billy Joel (876 intervenciones) el 29/11/2018 18:00:05
Leí tu enunciado y lo soluciono así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
 * Devuelve un String formado solamente por caracteres que solo aparecen 1 vez
 * @param cadena
 * @return 
 */
public String getCaracteresNoRepetidos(String cadena) {
    //Este objeto concatenará la cadena final
    StringBuilder s = new StringBuilder();
    //Este objeto será utilizado para contar cuantas veces se repite un caracter
    Map<Character, Integer> caracteres = new HashMap();
    //Lo primero es obtener un arreglo de caracteres de la cadena
    char[] array = cadena.toCharArray();
    //recorremos el arreglo contabilizando las repeticiones de cada caracter
    for (char c : array) {
        //Si el mapa de caracteres contiene el caracter entonces le suma 1 : de otro modo lo añade al mapa y le pone valor de 1
        caracteres.put(c, caracteres.containsKey(c) ? caracteres.get(c) + 1 : 1);
    }
    //Recorremos el mapa de caracteres preguntando cuantos caracteres aparecieron solo una vez
    caracteres.forEach((k, v) -> {
        //Si el caracter solo apareció una vez entonces se añade al StringBuilder, de otro modo no se agrega nada
        s.append(v == 1 ? k : "");
    });
    //Devolvemos el String solicitado
    return s.toString();
}

Hace unos días había respondido algo así, tal vez te pueda servir de guía
1
https://www.lawebdelprogramador.com/foros/Java/1675764-Contador-de-caracteres-separados.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar