2011-07-19 20 views
6

Estoy escribiendo un programa que reemplazará varias palabras en una sola cadena. Estoy usando este código pero está reemplazando la palabra pero dando resultado en dos líneas diferentes. Quiero que se reemplacen varias palabras y que salgan en una sola línea.¿Cómo reemplazar palabras múltiples en una sola cadena en Java?

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

pregunta similar: http://stackoverflow.com/q/1326682/18511 – Kip

Respuesta

0

Uso System.out.print() en lugar de System.out.println()

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

debe cambiar para que

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

Hola esto es realmente útil :) – shumaila

4

Por supuesto que imprime dos líneas: Usted tiene dos sentencias de impresión. Utilizar este código:

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

Hola, este código es realmente el que necesito, estoy tan agradecido contigo :) – shumaila

+1

@shumaila: Luego puedes hacer clic en la marca de la izquierda de mi respuesta para aceptar esta respuesta. Por supuesto, siempre se puede votar también: D –

12

Si desea hacerlo en una sola sentencia puede utilizar:

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

Alternativamente, si usted tiene muchos de estos reemplazos, que podría ser más prudente para almacenarlos en algunos tipo de estructura de datos, como un 2d-array. Por ejemplo:

//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: Esa es la forma perfecta. –

+4

No es la forma correcta de hacerlo, porque si tienes entrada '" abc "' y 'reemplazos = {{" a "} {" b "}, {" b "} {" c "}}' deberías esperar '" bcc "' en la salida pero obtendrá '" ccc "'. La solución se describió aquí - [stackoverflow.com/questions/1326682/java-replacing-multiple-different-substring-in-a-string-at-once-or-in-the-most](http://stackoverflow. com/questions/1326682/java-replace-multiple-different-substring-in-a-string-at-once-or-in-the-most). –

0

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

0

El problema de raíz es que, una vez que ha realizado el primer reemplazo, no puede volver a trabajar con la misma cadena dada inicialmente. Creo que la forma correcta de hacerlo sería usar diferentes copias y pasar de uno a otro el contenido mientras se está reemplazando Puede ser, mejor que esto, la solución podría ser simplemente hacer un reemplazo extra después de cada reemplazo hecho a borre los patrones ya reemplazados. ;)

0

En lugar de utilizar replace uso replaceAll la que trabajaron para mí

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

Todas las respuestas anteriores podrían ser correctas. Sin embargo, reemplazar cada cadena una vez no es eficiente. El siguiente código de Apache Commons StringUtils lo ayudará a reemplazar eficientemente todas las cadenas de una sola vez.

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"}); 

Tenga en cuenta que: el método anterior no funciona para reemplazar las palabras en el resultado de sustitución anterior. Por ejemplo:

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

dará resultado: "DCTE"

Cuestiones relacionadas