2011-07-19 11 views
6

Piszę program, który zastąpi wiele słów w jednym ciągu. Używam tego kodu, ale zastępuje słowo, ale daje wynik w dwóch różnych liniach. Chcę zastąpić wiele słów i wypisać je w jednym wierszu.Jak zamienić wiele słów w jeden ciąg w Javie?

import java.util.*; 
public class ReplaceString { 
    public static void main(String[] args) { 
     new ReplaceString().run(); 
    } 

    public void run() 
    { 

     System.out.println("Input String:\n");//// 
     Scanner keyboardScanner = new Scanner(System.in);///// 
     String inString = keyboardScanner.nextLine();///// 
     String strOutput = inString.replace("call me","cm"); 
     System.out.println(strOutput); 

     String strOutput1 = inString.replace("as soon as possible","asap"); 
     System.out.println(strOutput1);  

    } 
} 
+0

podobne pytanie: http://stackoverflow.com/q/1326682/18511 – Kip

Odpowiedz

0

Zastosowanie System.out.print() zamiast System.out.println()

0
String strOutput1 = inString.replace("as soon as possible","asap"); 

Należy zmienić na

String strOutput1 = strOutput .replace("as soon as possible","asap"); 
+0

Cześć ta jest naprawdę przydatna :) – shumaila

4

Oczywiście drukuje dwa wiersze: Masz dwie instrukcje drukowania. Użyj tego kodu:

import java.util.*; 

public class ReplaceString { 
    public static void main(String[] args) { 
     new ReplaceString().run(); 
    } 

    public void run() 
    { 

     System.out.println("Input String:\n");//// 
     Scanner keyboardScanner = new Scanner(System.in);///// 
     String inString = keyboardScanner.nextLine();///// 
     String shortMessage = shortifyMessage(inString); 
     System.out.println(shortMessage); 
    } 

    public String shortifyMessage(String str) 
    { 
     String s = str; 
     s = s.replace("call me", "cm"); 
     s = s.replace("as soon as possible", "asap"); 
     // Add here some other replacements 

     return s; 
    } 
} 
+0

Cześć, Ten kod jest naprawdę to, czego potrzebuję, jestem bardzo wdzięczny :) – shumaila

+1

@shumaila: Następnie możesz kliknąć zaznaczenie po lewej stronie mojej odpowiedzi, aby zaakceptować tę odpowiedź. Oczywiście zawsze możesz też przegłosować: D –

12

Jeśli chcesz to zrobić w jednym oświadczeniem można użyć:

String strOutput = inString.replace("call me","cm").replace("as soon as possible","asap"); 

Ewentualnie, jeśli masz wiele takich zamienników, może to być mądrzejszy przechowywać je w jakiś rodzaj struktury danych, takiej jak tablica 2d. Np

//array to hold replacements 
String[][] replacements = {{"call me", "cm"}, 
          {"as soon as possible", "asap"}}; 

//loop over the array and replace 
String strOutput = inString; 
for(String[] replacement: replacements) { 
    strOutput = strOutput.replace(replacement[0], replacement[1]); 
} 

System.out.println(strOutput); 
+0

+1: To jest naprawdę porządny sposób. –

+4

To nie jest właściwy sposób, ponieważ jeśli wprowadzisz "' abc "' i 'zamienniki = {{" a "} {" b "}, {" b "} {" c "}}' powinieneś się spodziewać '" bcc "' na wyjściu, ale otrzymasz '" ccc "'. Rozwiązanie zostało opisane tutaj - [stackoverflow.com/questions/1326682/java-replacing-multiple-different-substring-in-a-tring-at-once-or-in-the-most]-http://stackoverflow. com/questions/1326682/java-replaceing-multiple-different-substring-in-a-string-at-once-or-in-the-most). –

0

Zastosowanie MessageFormat.format (. QueryString, retrieveArguments() toArray());

0

Głównym problemem jest to, że po dokonaniu pierwszego zastąpienia nie można ponownie pracować z tym samym początkowo podanym ciągiem. Myślę, że właściwym sposobem na to byłoby używanie różnych kopii i przenoszenie z jednej na drugą zawartości podczas jej zastępowania. Może być, lepiej niż to, rozwiązaniem może być po prostu zrobić dodatkowy zamiennik po każdym dokonanym zastąpieniu do wymazać już wymienione wzorce. ;)

0

Zamiast replace korzystanie replaceAll który pracował dla mnie

String strOutput = inString.replaceAll("call me","cm").replaceAll("as soon as possible","asap"); 
0

Wszystkie powyższe odpowiedzi mogą być prawidłowe. Jednak zastąpienie każdego ciągu raz nie jest wydajne. Poniższy kod z Apache Commons StringUtils pomoże mu efektywnie zastąpić wszystkie łańcuchy za jednym zamachem.

System.out.println("Input String:\n");//// 
    Scanner keyboardScanner = new Scanner(System.in);///// 
    String inString = keyboardScanner.nextLine();///// 
StringUtils.replaceEach(inString, new String[]{"call me", "as soon as possible"}, new String[]{"cm", "asap"}); 

Uwaga: powyższa metoda nie działa na zastąpieniu słowa w poprzednim wyniku podstawienia. Na przykład:

StringUtils.replaceEach("abcde", new String[]{"ab", "d"}, new String[]{"d", "t"}) 

dadzą wynik: "dcte"

Powiązane problemy