2016-11-30 4 views
1

Ich muss eine Methode schreiben, die einen String aufnimmt und einen neuen String zurückgibt, der alle Vokale dupliziert und ein "b" dazwischen legt. Einzige Ausnahme sind Diphtonge, bei denen "ab" vor dem Diphton stehen sollte.Dupliziere einen Vokal in String und füge einen String dazwischen ein

Zum Beispiel: „Hallo“ zurückkehren würde „hebellobo“ „Hören“ zurückkehren würde „habearing“

Ich habe stundenlang mit meinem Code experimentiert, aber ich bin noch nichts getan. Nun, nichts, aber kann es nicht richtig für Vokale laufen lassen und kam überhaupt nicht zu den Diphtongs. Hier ist mein Code:

static Scanner sc = new Scanner(System.in); 

public static void main(String[] args) 
{ 
    System.out.print("Enter a string: "); 
    String s = sc.nextLine(); 
    String originalString = s; 

    for (int i = 0; i < s.length(); i++) 
    { 
     char c = s.charAt(i); 

     if ((c == 'A') || (c == 'a') || (c == 'E') || (c == 'e') || (c == 'I') || (c == 'i') || (c == 'O') 
       || (c == 'o') || (c == 'U') || (c == 'u')) 
     { 

      String front = s.substring(0, i); 
      String back = s.substring(i + 1); 

      s = front + c + "b" + back; 
     } 
    } 
    System.out.println(originalString); 
    System.out.println(s); 
} 

Dankbar für jede Hilfe!

Dank Ihrer Hilfe habe ich jetzt den folgenden Code (ohne Scanner):

public static boolean isVowel(char c) { 
    // TODO exercise 1 task b) part 1 

    if (c == 'a' || c == 'A' || c == 'Ä' || c == 'e' || c == 'E' || c == 'i' || c == 'I' || c == 'o' || c == 'O' 
      || c == 'Ö' || c == 'u' || c == 'U' || c == 'Ü') { 
     return true; 
    } else { 
     return false; 
    } 
} 

public static String toB(String text) { 
    // TODO exercise 1 task b) part 2 

    StringBuilder b = new StringBuilder(); 

    for (int i = 0; i < text.length() - 1; i++) { 
     char current = text.charAt(i); 
     char next = text.charAt(i + 1); 

     if (isVowel(current)) { 
      if (isVowel(next)) { 
       // 1 - Is a vowel followed by a vowel 
       // Prepend b 
       b.append("b"); 
       // Write current 
       b.append(current); 
       // Write next 
       b.append(next); 
       i++; // Skip next vowel 
      } else { 
       // 2 - Is a vowel followed by a consonant 
       b.append(current); 
       b.append("b"); 
       b.append(current); 
      } 
     } else { 
      // 3 - Is a consonant 
      b.append(current); 
} 
    } 
    for (int i = 0; i < text.length() - 1; i++) { 
    char last = text.charAt(text.length() - 1); 
    char current = text.charAt(i); 
    if (isVowel(last)) { 
     // Case 1 
     b.append(current); 
     b.append("b"); 
     b.append(current); 

     // Case 2 is not possible for last letter 
     } else { 
     // Case 3 
     b.append(last); 
     } 

    } 
    // Here b.toString() is the required string 
    return b.toString(); 
    } 

Wenn Sie das Wort „Mutter“ zum Beispiel gesagt, der Ausgang ist „Mobotheberrrrr“, die völlig in Ordnung ist, mit der Ausnahme dass es aus irgendeinem Grund den letzten Buchstaben "r" wiederholt. Eingabe "Ziel" führt leider zu Ausgabe "Gboalll".

+1

Sollte das nicht "habearibing" sein? – Henry

+0

Was ist Ihre Interpretation von 'diphthong'? Ist es "irgendwelche" zwei aufeinander folgende Vokale oder nur diese zwei aufeinander folgenden Vokale, die eine bestimmte Bedingung erfüllen? – VHS

+0

@Henry Du hast vollkommen Recht, sorry :) –

Antwort

0

Meine beste Vermutung ist eine Kette von replaceAlls machen, weil Sie im Grunde sind Vokale mit Duplikaten und bs ersetzen so etwas versuchen, wie so:

String original = something; 
String adjusted = original.replaceAll("ea","abea").replaceAll("a","aba").replaceAll(...)...; 

Und nur in den Regeln zu füllen. Achten Sie darauf, Diphthonge zu überprüfen, bevor Sie einzelne Vokale überprüfen, oder sie werden als zwei einzelne Vokale behandelt.

1

Sie müssen den aktuellen Buchstaben und auch den nächsten Buchstaben wissen.

In Ihrem Code berücksichtigen Sie nur den aktuellen Buchstaben.

Hier ist ein Skelett-Code, um das Problem zu lösen. Grundsätzlich müssen Sie überprüfen:

  • Wenn der aktuelle Buchstabe ein Vokal durch einen Vokal
  • Wenn der aktuelle Buchstabe ist ein Vokal, gefolgt von einem Konsonanten
  • gefolgt ist Wenn der aktuelle Buchstabe ein Konsonant

    ist
    String originalString = ... 
    StringBuilder b = new StringBuilder(); 
    for (int i = 0; i < s.length() - 1; i++) { 
        char current = s.charAt(i); 
        char next = s.charAt(i + 1); 
    
        if (isVowel(current)) { 
         if (isVowel(next)) { 
          // 1 - Is a vowel followed by a vowel 
          // Prepend b 
          b.append("b"); 
          // Write current 
          b.append(current); 
          // Write next 
          b.append(next); 
          i++; // Skip next vowel 
         } else { 
          // 2 - Is a vowel followed by a consonant 
          b.append(current); 
          b.append("b"); 
          b.append(current); 
         } 
        } else { 
         // 3 - Is a consonant 
         b.append(current); 
        } 
    } 
    
    char last = s.charAt(s.length() - 1); 
    if (isVowel(last)) { 
        // Case 1 
        b.append(current); 
        b.append("b"); 
        b.append(current); 
    
        // Case 2 is not possible for last letter 
        } else { 
        // Case 3 
        b.append(last); 
        } 
    
    
    // Here b.toString() is the required string 
    

Bitte beachten Sie dies nur als Skelett, insbesondere:

  • Prüfung für Randbedingungen
  • implementiert die Methode isVowel
  • Check für null und leere Strings

Hinweis: Die Verwendung von StringBuilder ist nur aus Leistungsgründen mit direkt die String s wird die geben dasselbe Ergebnis

+0

Vielen Dank für Ihre Hilfe !!! Ich implementierte die neue Methode und änderte die Struktur ein wenig und es funktioniert jetzt fast perfekt, das einzige Problem, das auftritt, ist mit den Diphtongs, die ich nicht zusammen mit den Zeichen in "isVowel" implementieren kann. –

+0

Ich habe meinen vorherigen Post bearbeitet und eine modifizierte Version Ihres Codes gepostet –

Verwandte Themen