2017-06-02 7 views
0

so habe ich diese Aufgabe, die ich tun muss und was ich versuche, ein Wort von einer Zeichenfolge zu einer Abkürzung eines Wortes zu ändern. Das Wort und eine Abkürzung werden in einer zweidimensionalen Matrix gespeichert und. Hier ist der Code, den ich bereits bekommen habe, aber es funktioniert nicht.Ersetzen eines bestimmten Wortes in einer Zeichenfolge aus einer Zeichenfolge-Matrix mit Java

String[][] abriev = {{"United Kingdom", "kilometers"}, {"UK", "km"}}; 

String origText = "The;coastline;of;United Kingdom;is;12429;kilometers"; 

int n = origText.length(); 
for (int i = 0; i < n ; i++){ 

    origText = origText.replaceAll(";", " ");  

    if (origText.toLowerCase().contains(abriev[i][0])){ 

     origText = origText.replaceAll(abriev[i][0], abriev[0][i]); 
    } 
} 

System.out.println(origText); 

Antwort

1

Ihr String sieht so aus, als ob er leicht aufgeteilt werden kann, und Sie könnten darüber iterieren, den Austausch durchführen und an eine StringBuilder anhängen.

Wie für die Zeichenfolge 2d-Array, könnten Sie dies leicht in eine Karte konvertieren und den Schlüssel auf das Wort, das Sie suchen, und den Wert festlegen.

In Ihrem Code setzen Sie die vorgenommenen Änderungen tatsächlich zurück, indem Sie [0][i] als zweiten Parameter in replaceAll() aufrufen;

Was würde ich dies tun würde:

String[][] abriev = {{"United Kingdom", "kilometers"}, {"UK", "km"}}; 

    String origText = "The;coastline;of;United Kingdom;is;12429;kilometers"; 
    HashMap<String, String> wordAbbr = new HashMap<String,String>(); 
    for(int i = 0; i < abriev[0].length; i++) 
    { 
     wordAbbr.put(abriev[0][i], abriev[1][i]); 
    } 
    String [] origArr = origText.split(";"); 
    String output = ""; 
    for(String s : origArr){ 
     if(wordAbbr.get(s)!=null) { 
      output = output + " " + wordAbbr.get(s); 
     }else { 
      output = output + " " + s; 
     } 
    } 
    output = output + "."; 

    System.out.println(output); 
+0

Thank you very much :) – Lalano

1

Zunächst einmal würde ich abriev auf eine Map für eine einfachere Lookups konvertieren. Dann würde ich ursprüngliche Text nehmen, teilen Sie es durch den ; Charakter, es streamen, ersetzen Sie jedes Wort mit der Abkürzung (falls vorhanden), und wieder beitreten, den Strom:

String[][] abriev = {{"United Kingdom", "kilometers"}, {"UK", "km"}}; 
Map<String, String> abrievMap = 
    IntStream.range(0, abriev[0].length) 
      .boxed() 
      .collect(Collectors.toMap(i -> abriev[0][i], i -> abriev[1][i])); 

String origText = "The;coastline;of;United Kingdom;is;12429;kilometers"; 

String abbreviated = 
    Arrays.stream(origText.split(";")) 
      .map(word -> abrievMap.getOrDefault(word, word)) 
      .collect(Collectors.joining(";")); 
1

Sie zuweisen Länge von orgText variable n:

String origText = "The;coastline;of;United Kingdom;is;12429;kilometers"; 

Und Sie haben eine zweidimensionale Anordnung:

String[][] abriev = {{"United Kingdom", "kilometers"}, {"UK", "km"}}; 

Und Sie werden voniterierenbis Länge von origText. Auch innerhalb der Schleife versuchen Sie, auf den Index i zuzugreifen. Dies ist nicht möglich, da Ihr erstes Array nur zwei Indizes (zwei Arrays) enthält.

Denn das von Ihnen, wenn Sie das Programm ausführen werden Sie ArrayIndexOutOfBoundsException

Versuchen erhalten Collections zu verwenden.

Verwandte Themen