2016-07-17 4 views
2

Ich bitte normalerweise nicht um Hilfe, aber hier brauche ich es wirklich.
Ich habe das folgende Codebeispiel:Wie ersetze ich eine bestimmte Zeichenfolge in Java?

String text = "aa aab aa aab"; 
text = text.replace("aa", "--"); 
System.out.println(text); 

Console output: -- --b -- --b 

Ich habe eine Frage, wie kann ich nur aa Teile der Zeichenfolge nicht aab enthalten ersetzen.
So ist die Ausgabe der Konsole ist:

-- aab -- aab 

ich ein weiteres Beispiel haben:

String text = "111111111 1"; 
text = text.replace("1", "-"); 
System.out.println(text); 

Console output: --------- - 

Ich möchte nur ein einzelnes Zeichen ersetzen, die nicht alle die gleichen, die zusammen gestellt werden.
So ist die Ausgabe der Konsole ist:

111111111 - 

Gibt es Java-Verknüpfungen für Situationen wie diese? Ich kann nicht herausfinden, wie man nur bestimmte Teile der Saite ersetzt.
Jede Hilfe würde geschätzt :)

Antwort

0

Sie könnten einen regulären Ausdruck mit String.replaceAll(String, String) verwenden. Durch die Verwendung von Wortgrenzen (\b), so etwas wie

String[] texts = { "aa aab aa aab", "111111111 1" }; 
String[] toReplace = { "aa", "1" }; 
String[] toReplaceWith = { "--", "-" }; 
for (int i = 0; i < texts.length; i++) { 
    String text = texts[i]; 
    text = text.replaceAll("\\b" + toReplace[i] + "\\b", toReplaceWith[i]); 
    System.out.println(text); 
} 

Ausgänge (wie gewünscht)

-- aab -- aab 
111111111 - 
0

Sie diese ersetzen:

String text = "aa aab aa aab"; 
text = text.replace("aa ", "-- "); 
System.out.println(text); 

ich meine Sie ein Leerzeichen am Ende von „aa“

0

hinzufügen können Sie einen regulären Ausdruck verwenden können

String text = "111111111 1"; 
text = text.replaceAll("1(?=[^1]*$)", ""); 
System.out.println(text); 

Erläuterung:

  • String.replaceAll nimmt eine regex konträr zu String.replace die eine Litteral nimmt
  • (?=reg) der rechte Teil der regulären Ausdruck ersetzen müssen die regex durch eine Zeichenfolge folgen passenden reg, aber nur der rechte Teil
  • aufgenommen wird, bedeutet
  • [^1]* eine Sequenz von 0 auf eine beliebige Anzahl von Zeichen unterschiedlich von '1'
  • $ bedeutet das Ende der Schnur

in einfachem Englisch erreicht ist, bedeutet dies: Pleas e Ersetzen Sie durch eine leere Zeichenfolge alle Vorkommen des '1'-Zeichens, gefolgt von einer beliebigen Anzahl von Zeichen, die sich von '1' bis zum Ende der Zeichenfolge unterscheiden.

+0

bei anderen Antworten sucht, ich die Frage vielleicht falsch verstanden. Für den Rekord halten – Dici

0

Wir können die StringTokenizer in Java verwenden, um die Lösung für jede Art von Input acheive.Unterhalb der Probenlösung ist,

public class StringTokenizerExample {

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    String input = "aa aab aa aab"; 
    String output = ""; 
    String replaceWord = "aa"; 
    String replaceWith = "--"; 
    StringTokenizer st = new StringTokenizer(input," "); 
    System.out.println("Before Replace: "+input); 
    while (st.hasMoreElements()) { 
     String word = st.nextElement().toString(); 
     if(word.equals(replaceWord)){ 
      word = replaceWith; 
      if(st.hasMoreElements()){ 
       word = " "+word+" "; 
      }else{ 
       word = " "+word; 
      } 
     } 
     output = output+word; 
    } 
    System.out.println("After Replace: "+output); 
}