String-Methoden (Hilfe gesucht)



  • Hallo!

    Ich habe die folgende Aufgabenstellung zu bewältigen:

    Erstellen Sie eine statische Methode ersetzeGleichklingend mit einen Argument s vom
    Typ String, die einen String-Wert zurück gibt.
    In dieser Methode sollen ähnlich- oder gleichklingende Konsonantenin der Zeichenkette s durch ein einziges Zeichen ersetzt werden.

    Wandeln Sie die Zeichenkette s zunächst in Großbuchstaben um, und fügen Sie das Dollarzeichen an den Anfang von s an. Führen Sie anschließend folgende Substitutionen in der angegebenen Reihenfolge durch:

    1. PH => F
    2. V => F
    3. W => F
    4. B => P

    Geben Sie die veränderte Zeichenkette ohne Dollarzeichen zurück. Verwenden Sie zum Lösen dieses Aufgabenteils die Methoden toUpperCase(), replace(), substring() und length() der String-Klasse.

    Also erstelle ich eine solche Methode und wandle s zunächst in Großbuchstaben um:

    static String ersetzeGleichklingend(String $s){
    
    $s = $s.toUpperCase();
    
     }
    

    Und beim nächten Schritt scheitere ich leider kläglich.

    Wie kann ich zB. PH durch F ersetzen?

    Mit $s= $s.replace("PH","F");

    geht es ja nicht, weil replace() zwei chars verlangt.

    Außerdem weiß ich nicht, wozu man hier length() und substring() braucht.

    Weiß jemand Rat?

    Danke im Voraus

    h3lios

    PS: Programmiere mit Java 5



  • edit... upps... hab dein text nicht richtig gelesen... mom, ich überleg mir kurz mal ne 'richtige' lösung... 😉
    edit2: hast du schon die Lösung, wenn man nur ein Zeichen umwandeln muss?

    edit. so könnte es gehen:

    if (s.length()>1)return (s.substring(s.length()-1).replace('H','F'));
    

    ndT Lupo

    Zeiten ändern sich, Instinkte nicht!
    ^Sönke Burkert^



  • Aehm, wieso $s?
    Da steht doch dass man dem Text ein $ anfügen soll und nicht der Variablen?
    Sind wir hier in Basic? 😃



  • h3lios schrieb:

    Erstellen Sie eine statische Methode ersetzeGleichklingend mit einen Argument s ...In dieser Methode sollen ähnlich- oder gleichklingende Konsonantenin der Zeichenkette s durch ein einziges Zeichen ersetzt werden.
    ...
    3. W => F

    Seit wann klingt denn W wie F?
    Wasser => Fasser, Welle => Felle??? 😕



  • Gruml. Hab' herausgefunden, dass replace doch strings akzptiert. 😑



  • CengizS schrieb:

    Aehm, wieso $s?
    Da steht doch dass man dem Text ein $ anfügen soll und nicht der Variablen?
    Sind wir hier in Basic? 😃

    Ne, da steht doch, man solle es vor s anfügen.



  • Lupo4u2 schrieb:

    edit... upps... hab dein text nicht richtig gelesen... mom, ich überleg mir kurz mal ne 'richtige' lösung... 😉
    edit2: hast du schon die Lösung, wenn man nur ein Zeichen umwandeln muss?

    edit. so könnte es gehen:

    if (s.length()>1)return (s.substring(s.length()-1).replace('H','F'));
    

    ndT Lupo

    Zeiten ändern sich, Instinkte nicht!
    ^Sönke Burkert^

    mit s.length()-1 löschst du doch den ganzen String...

    Bzw. aus der Erkenntnis, dass replace() auch Strings akzeptiert, bin ich auch nicht viel schlauer geworden. Jetzt habe ich halt 19 Mal abgetipp: $s = $s.replace("Buchstabe(en)","Buchstab(en)"). Weiß aber noch immer nicht, wie ich nun s ohne $ zurückgeben soll und wozu substring und legth 😞

    Achso: Was bedeutet denn das $ vor dem s überhaupt?



  • also das $ machst du wieder weg. Weil eine Variable nicht aus dem $-Zeichen bestehen darf.

    und fügen Sie das Dollarzeichen an den Anfang von s an

    Das würde ich eher so verstehen:

    String s="Hallo";
    // $ voranstellen
    s="$"+s; // also "$Hallo"
    

    PS: In PHP steht z.B. immer ein $ vor dem variable namen. Bsp.: $text="Hallo"; $i=0;

    EDIT:

    Vlt. könnt die Methode so aussehen (ungestestet):

    public static String ersetzeGleichklingend(String s)
    {
      s=s.toUpperCase();
      s="$"+s;
    
      s=s.replaceAll("PH", "F");
      s=s.replaceAll("V" , "F");
      s=s.replaceAll("W" , "F");
      s=s.replaceAll("B" , "P");
      /* geht bestimmt geschickter, indem man nen gescheiten
         regexp entwirft, bin aba grad zu Faul dafür.
      */
    
      return s.substring(1);
    }
    


  • Er soll doch nicht replaceAll, sondern replace verwenden. Sonst ist es doch zu einfach.



  • rudirotnase schrieb:

    Er soll doch nicht replaceAll, sondern replace verwenden. Sonst ist es doch zu einfach.

    uuups...stimmt ja 🤡

    Vlt. so:

    public static String ersetzeGleichklingend(String s)
    {
      s=s.toUpperCase();
      s="$"+s;
    
      for(int i=2; i<s.length(); ++i)
      {
        if('H'==s.charAt(i) && 'P'==s.charAt(i-1))
          s=s.substring(0, i-1)+"F"+s.substring(i+1);
      }
    
      s=s.replace('V' , 'F');
      s=s.replace('W' , 'F');
      s=s.replace('B' , 'P');
    
      return s.substring(1);
    }
    

Anmelden zum Antworten