Groß- und Kleinbuchstaben gleich behandeln

stefan.h

Mitglied
Hallo Leute,
Ich brauch mal schnell eure Hilfe!
Ich muss eine Methode schreiben die ein Array einliest und alle Zeichen die darin mehrfach vorkommen werden herausgelöscht!
Und die Buchstaben werden dann 1mal ausgegeben!

Also aus "Haalloo" wird "Halo"!
Dies soll unabhängig von Groß und Kleinbuchstaben sein!
Könnt ihr mir da helfen wie ich das implemntieren kann?
Es sind keine Strings erlaubt!

Java:
public class ptlc {
  
   public static void main(String [] args){       
     char[] lawtext = {'P','r','e','s','i','d','e','n','t','i','a','l',' ','I','m','p','e','a','c','h','m','e','n',
         't',' ','d','u','e',' ','t','o',' ','I','n','c','o','m','p','e','t','e','n','c','e',' ','L','a','w'};
    
    
  IO.print( lawtext );
    
     IO.print("\n\n");
    
     char [] old= ptlc(lawtext);
    
     IO.print( old );
    
     IO.print("\n\n");
    
}//end main
  
   static char [] ptlc(char [] lawtext){  //Methode zum trumpifizieren
     int lang= 0;
   if(lawtext!=null){

       int i= 0, z=0, q=0;                            //Laufvariable for-Schleife
                                     //Array für trumpifizierten Text
         for(i= 0; i < lawtext.length-1; i++){             //for-Schleife zum durchsuchen von lawtext
                               //Arraywert in Hilfsvariable speichern
          
           for(z=i+1; z<lawtext.length; z++){  
            
           if(lawtext[i] == lawtext[z]){
             lawtext[z]= '\n';  
           }//end if
           }//end for2
            
           }//end for1
        
         i= 0;
        
         for(i=0; i<lawtext.length; i++){
          
           if(lawtext[i]!='\n'){
             lang++;
           }
         }
    
   char[] pt= new char[lang];
   i=0;
   int a= 0;
   for(i=0; i<lawtext.length; i++){
    
     if(lawtext[i]!='\n'){
      
    
     pt[a] = lawtext[i];
     a++;    
     }
   }
   lawtext=pt;
   }
     return lawtext;
   }
}//end class
 
Zuletzt bearbeitet von einem Moderator:
Hmm, das sind immer so eigentartig erzwungende Aufgaben ...

Zunächstmal, kann man Groß und Klein rechnerisch auseinanderhalten, das ist wahrscheinlich das Ziel.

Aber man kann ja auch mit Character.toLowerCase() in einer vereinfachten For-Schleife schauen und vergleichen, das ganze in eine ArrayList verfrachten aber zuvor schauen ob schon drin und wenn ja mit continue weiter, sonst dazuaddieren und den unveränderten char per System.out.print() ohne -ln ausgeben. Fertig.

Java:
        char[] lawtext = { 'P', 'r', 'e', 's', 'i', 'd', 'e', 'n', 't', 'i', 'a', 'l', ' ', 'I', 'm', 'p', 'e', 'a',
                'c', 'h', 'm', 'e', 'n', 't', ' ', 'd', 'u', 'e', ' ', 't', 'o', ' ', 'I', 'n', 'c', 'o', 'm', 'p', 'e',
                't', 'e', 'n', 'c', 'e', ' ', 'L', 'a', 'w' };
        List<Character> list = new ArrayList<>();
        char chr;
        for (char c : lawtext) {
            chr = Character.toLowerCase(c);
            if (list.contains(chr))
                continue;
            list.add(chr);
            System.out.print(c);
        }

Ebenso könnte man ein Array von Typ boolean machen und schauen ob der ASCII-Wert als Index schon mal zu true wurde, das wäre die rechnerische Variante. Wobei man da beim Leerzeichen, Komma, Punkt usw. aufpassen müsste.
 
Könnt ihr mir da helfen ...
Beim eigentlichen Problem wurde dir ja schon geholfen.

Von meiner Seite noch ein paar Anregungen zu deinem Code:
Klassennamen werden in UpperCamelCase geschrieben, ansonsten wird alles andere in lowerCameCase geschrieben.
Außerdem verwende sprechende Namen für alles! Anhand des Namens sollte man erkennen können wofür die Klasse oder Methode zuständig ist -> bei "ptcl" habe ich keine Ahnung was getan wird.
Man sollte vermeiden eine Methode so zu nennen wie die Klasse.
Sorge für eine korrekte Einrückung deines Codes, dadurch wird er lesbarer und du kannst dir Kommentare wie //end for2 oder [/icode]//end main[/icode] sparen.
Schreibe die []-Klammern zum Typen ohne ein Leerzeichen dazwischen! Also char[] statt char [].
Vor jeder for-Schleife schreibst du i = 0;. Diese Zeile kannst du dir sparen, da du in der for-Schleife die Variable i sowieso mit dem Wert 0 initialisierst.

Dein Code formatiert und etwas überarbeitet:
Java:
public class Ptcl {

   public static void main(String[] args) {   
     char[] lawtext = {'P','r','e','s','i','d','e','n','t','i','a','l',' ','I','m','p','e','a','c','h','m','e','n','t',' ','d','u','e',' ','t','o',' ','I','n','c','o','m','p','e','t','e','n','c','e',' ','L','a','w'};
     IO.print(lawtext);
     IO.print("\n\n");

     char[] old = ptlc(lawtext);
     IO.print(old);
     IO.print("\n\n");
   }

   //Methode zum trumpifizieren
   static char[] ptlc(char[] lawtext) {
     int lang = 0;
     if(lawtext != null) {
       int i = 0, z = 0, q = 0;  //Laufvariable for-Schleife
       //Array für trumpifizierten Text
       for(i = 0; i < lawtext.length-1; i++) {  //for-Schleife zum durchsuchen von lawtext
         //Arraywert in Hilfsvariable speichern
         for(z = i + 1; z < lawtext.length; z++) {  
           if(lawtext[i] == lawtext[z]) {
             lawtext[z] = '\n';  
           }
         }
       }
       
       i = 0;
       for(i = 0; i < lawtext.length; i++) {
         if(lawtext[i] != '\n') {
           lang++;
         }
       }

       char[] pt = new char[lang];
       i = 0;
       int a = 0;
       for(i = 0; i < lawtext.length; i++) {
         if(lawtext[i] != '\n') {
           pt[a] = lawtext[i];
           a++;   
         }
       }
       lawtext = pt;
     }
     return lawtext;
   }
}
 

Zurück
Oben