如何在Java中替换单个字符串中的多个单词?

时间:2011-07-19 09:40:24

标签: 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);      

    }
}

9 个答案:

答案 0 :(得分:17)

如果您想在一个声明中使用:

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

或者,如果您有许多这样的替换,将它们存储在某种数据结构(如二维数组)中可能更明智。例如:

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:4)

以上所有答案都可能是正确的。但是,更换每个字符串一次效率不高。以下代码来自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”

答案 3 :(得分:1)

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

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-lang3</artifactId>
  <version>3.7</version>
</dependency>

代码如下:

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

答案 4 :(得分:0)

使用System.out.print()代替System.out.println()

答案 5 :(得分:0)

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

您应该将其更改为

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

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