2016-10-25 3 views
0

Ich habe derzeit ein Programm, das Tokens einer Zeichenfolge einzeln in ihre Piglatin-Gegenstücke konvertiert. Das Programm muss sie jedoch wieder in die Zeichenkette einfügen, in der sie aufgenommen wurden, mit ALLEN ursprünglichen Zeichen darin.Java Hinzufügen von modifizierten Token in Zeichenfolge

Hasta la vista baby. - the Terminator. 

Hasta 
astaHay 

la 
alay 

vista 
istavay 

baby 
abybay 

the 
ethay 

Terminator 
erminatorTay 

Dies sind alle Wörter und ihre Umrechnungen. Ich habe eine Methode ausprobiert, die sie direkt wieder einfügt, aber die Berücksichtigung fehlender Zeichen und unterschiedlicher Länge machte es mir schwer, das zu tun. Ich habe versucht, Zeichen basierend auf der Länge jedes addierten Tokens einzufügen, aber das führte zu Komplikationen, wenn mehr als ein Leerzeichen vorhanden war. Wie würde ich diese Worte wieder in den String einfügen, so sieht es wie folgt aus:

Astahay alay istavay abybay. - ethay Erminatortay 


    PigOrig = key.readLine(); 
    String[] PigSplit = PigOrig.split("\\W+"); 
    for(int i = 0; i < PigSplit.length; i++) 
    { 
     if(PigSplit[i] != null) 
     { 
      FinalStr += Piggy.vowelOut(PigSplit[i]); // VowelOut returns the converted word only, no trailing whitespace or punctuation 
      lengthtot += PigSplit[i].length(); 
      FinalStr += PigOrig.charAt(lengthtot); // attempt at adding up the words and inserting the original punctuation that was in the string PigOrig 
      lengthtot ++; 
     } 

    } 
+0

zeigen Sie Ihren Code dann können Leute schlagen Sie vor, was geändert werden muss. –

+0

@SabirKhan hat es hinzugefügt. –

+0

Wissen Sie, wie Sie HashMap verwenden? –

Antwort

1

Wenn ich verstehe Ihre Frage, es ist ‚wie kann ich jedes Wort mit seiner Übersetzung in einem String ersetzen?‘ Der einfachste Weg ist die Verwendung von String.replace.

Wenn Sie also ein translate Methode erstellt haben, dann könnte man so etwas wie:

String line = key.readLine(); 
for (String word: line.split("\\W+")) 
    line = line.replace(word, translate(word)); 

Der Vorteil dieses Ansatzes besteht darin, dass Sie die Wörter in der ursprünglichen Zeichenfolge ersetzen die Worte nicht wieder zusammen.

Beachten Sie auch, dass es einfacher zu übersetzen ist, wenn Sie nur die Mustererkennung verwenden. Zum Beispiel:

private String translate(String word) { 
    Matcher match = Pattern.compile("(\\w*)([aeiou]\\w*)").match(word); 
    if (match.matches()) 
     return match.group(2) + match.group(1) + "ay"; 
    else 
     return word; 
} 
+0

Corner Fall: wenn Sie containts sowohl 'be' und 'ebay' eingeben, wird 'be' durch 'ebay' ersetzt und später * beide * Vorkommen von 'ebay' werden ersetzt. –

+0

Hat super funktioniert, danke. Ich verwendete –

+0

line = line.replace (PigOrig [i], Piggy.translator (PigOrig [i])); Ich bin überrascht, dass ich früher nicht an eine so einfache Lösung gedacht habe. Ich verstand nicht ganz, wie die Arrays funktionierten. Danke für deine Lösung, hat mir sehr geholfen! –

0

Wenn ich richtig verstehe, dass Sie alle Wörter in der Eingabe übersetzen wollen, dann wäre mein Geschmack für die neue Zeichenfolge von Grund auf neu:

String pigOrig = key.readLine(); 
    String[] pigSplit = pigOrig.split("\\W+"); 
    StringBuilder buf = new StringBuilder(pigOrig.length()); 
    buf.append(translateWord(pigSplit[0])); 
    for(int i = 1; i < pigSplit.length; i++) { 
     buf.append(' '); 
     buf.append(translateWord(pigSplit[i])); 
    } 
    String result = buf.toString(); 
+0

Es ist eine Zuweisung, dass sie grundlegende Elemente wie Arrays verwenden dürfen. –

+0

In diesem Fall ist 'System.out.print()' grundlegend? Benutze es anstelle von 'buf.append()' und beende es mit 'System.out.println()' (wenn ich der Instructor gewesen wäre, hätte ich einen zusätzlichen Kredit für die gute Verwendung von Konzepten gegeben, die im Kurs noch nicht behandelt wurden). –

Verwandte Themen