如何在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); } } 

如果您想在一个语句中执行此操作,您可以使用:

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

或者,如果您有许多此类替换,将它们存储在某种数据结构(如2darrays)中可能更明智。 例如:

 //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); 

当然它会打印两行:你有两个打印语句。 使用此代码:

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

以上所有答案都可能是正确的。 但是,更换每个字符串一次效率不高。 以下代码来自Apache Commons StringUtils将帮助它一次性有效地替换所有字符串。

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

请注意:上述方法不能替换先前替换结果中的单词。 例如:

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

会给出结果:“dcte”

使用System.out.print()而不是System.out.println()

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

你应该改变它

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

使用MessageFormat.format(queryString,retrieveArguments()。toArray());

根本问题是,一旦你进行了第一次替换,你就无法再使用相同的最初给定的字符串。 我认为这样做的正确方法是使用不同的副本,并在更换内容时从一个副本移动到另一个内容可能比这更好,解决方案可能只是在每次完成替换后进行额外的替换以擦除已经取代了模式。 ;)

而不是使用replace使用replaceAll为我工作

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

现在您可以在commons-lang3包中使用StringUtils。

   org.apache.commons commons-lang3 3.7  

代码如下:

 strOutput = StringUtils.replaceEach(inString, new String[]{"call me", "as soon as possible"}, new String[]{"cm", "asap"});