En mi programa, el usuario introduce una cadena, y se busca en primer lugar la más grande de modo de caracteres de la cadena. A continuación, mi programa se supone que para eliminar todos los duplicados de un carácter en una cadena, (entrada de usuario: aabc, programa imprime: abc) que no estoy del todo seguro de cómo hacerlo. Puedo conseguirlo para eliminar duplicados en algunas cadenas, pero no todos. Por ejemplo, cuando el usuario pone «aabc» imprimirá «abc», pero si el usuario pone «aabbhh», se imprimirá «abbhh.» También, antes de añadir los removeDup método para mi programa, sólo se imprime la maxMode una vez, pero después he añadido la removeDup método, se comenzó a imprimir el maxMode dos veces. ¿Cómo puedo evitar que de la impresión de dos veces?
Nota: no puedo convertir de las cuerdas de una matriz.
import java.util.Scanner;
public class JavaApplication3 {
static class MyStrings {
String s;
void setMyStrings(String str) {
s = str;
}
int getMode() {
int i;
int j;
int count = 0;
int maxMode = 0, maxCount = 1;
for (i = 0; i< s.length(); i++) {
maxCount = count;
count = 0;
for (j = s.length()-1; j >= 0; j--) {
if (s.charAt(j) == s.charAt(i))
count++;
if (count > maxCount){
maxCount = count;
maxMode = i;
}
}
}
System.out.println(s.charAt(maxMode)+" = largest mode");
return maxMode;
}
String removeDup() {
getMode();
int i;
int j;
String rdup = "";
for (i = 0; i< s.length(); i++) {
int count = 1;
for (j = 0; j < rdup.length(); j++) {
if (s.charAt(i) == s.charAt(j)){
count++;
}
}
if (count == 1){
rdup += s.charAt(i);
}
}
System.out.print(rdup);
System.out.println();
return rdup;
}
}
public static void main (String[] args) {
Scanner in = new Scanner(System.in);
MyStrings setS = new MyStrings();
String s;
System.out.print("Enter string:");
s = in.nextLine();
setS.setMyStrings(s);
setS.getMode();
setS.removeDup();
}
}
Probar este método…debería funcionar bien!
Bienvenido a StackOverflow!
Estás llamando
getMode()
tanto en el exterior como en el interior deremoveDup()
, que es por qué es la impresión dos veces.Con el fin de eliminar todos duplicados, tendrá que llamar a
removeDup()
más y más hasta que todos los duplicados se ha ido de su cadena. Ahora sólo estás llamando a la vez.¿Cómo podría hacer eso? Piense acerca de cómo está la detección de duplicados, y usar eso como la condición final para un
while
bucle o similar.Feliz codificación!
¿No debería esto ser una manera más fácil? Además, todavía estoy aprendiendo.
Usted puede hacer esto:
Creo que una versión optimizada que soporta códigos ASCII puede ser como este:
por favor, tenga en cuenta que cada uno de orc(s) representan una asignación de un rango de caracteres ASCII y cada java largo variable puede crecer tan grande como (2^63) y ya tenemos 128 caracteres en ASCII, así que tenemos tres ocr(s) que, básicamente, los mapas de las apariciones de los caracteres a un número largo.
Ahora si es un duplicado de la
será mayor que cero y nos saltamos ese char y, finalmente, podemos crear una nueva cadena con el tamaño de índice que muestra el pasado de no duplicar los elementos del índice.
Puede definir más orc(s) y el apoyo de los demás-conjuntos de caracteres si desea.
Puede usar HashSet así como normal para los bucles:
Probar esta simple respuesta – funciona bien para una simple cadena de caracteres que acepta como entrada del usuario:
importar java.util.Escáner;
clase pública string_duplicate_char {
}
Otra solución fácil para recortar los elementos duplicados en una cadena con HashSet y ArrayList :
puede utilizar este código simple y entender cómo quitar valores duplicados de una cuerda.Creo que esta es la manera más sencilla de entender este problema.
clase RemoveDup
{
}
escribí este programa. Estoy usando 2 char matrices lugar. Puede definir el número de duplicados de los caracteres que desea eliminar de la cadena original y también muestra el número de ocurrencias de cada carácter en la cadena.
Probar esta sencilla solución para la ELIMINACIÓN de CARACTERES DUPLICADOS/CARTAS DE CADENA DADA