JAVA:替换字符串中的单词

时间:2015-07-21 16:50:54

标签: java string replace words

我想替换字符串中的单词,但我遇到的困难很小。这就是我想要做的。我有字符串:

String a = "I want to replace some words in this string";

它应该像某种翻译一样工作。我正在使用String.replaceAll()执行此操作,但由于此原因,它无法正常工作。让我们说我正在从英语翻译成德语,这应该是输出(Ich表示德语中的I)。

String toTranslate = "I";
String translated = "Ich";
a = a.replaceAll(toTranslate.toLowerCase(), translated.toLowerCase());

现在字符串a的输出将是:

"ich want to replace some words ich**n** **th**ich**s** **str**ich**ng**"

如何更换单词,而不是单词中的子词?

6 个答案:

答案 0 :(得分:2)

replaceAll使用正则表达式,因此您可以添加word boundarieslook-around机制来检查您要替换的单词周围是否没有非空格字符。

String toTranslate = "I";
String translated = "Ich";
a = a.replaceAll("(?<!\\S)"+toTranslate.toLowerCase()+"(?!\\S)", translated.toLowerCase());

您还可以添加引用机制,以便在要替换的单词中转义任何正则表达式字符,例如+ * (。顺便说一下,您不需要将字符串更改为小写,只需向正则表达式(?i)添加不区分大小写的标记。

a = a.replaceAll("(?i)(?<!\\S)"+Pattern.quote(toTranslate)+"(?!\\S)", translated.toLowerCase());

答案 1 :(得分:1)

使用split(" ")获取句子中的每个单词。然后在每个单词上使用replaceAll。

  String a = "I want to replace some words in this string";
        String toTranslate = "I";
        String translated = "Ich";
        String newString[]=a.split(" ");
        for (String string : newString) {
            string=string.replaceAll(toTranslate, toTranslate.toLowerCase());//Adding this line ensures you dont miss any uppercase toTranslate
            string=string.replaceAll(toTranslate.toLowerCase(), translated.toLowerCase());
            System.out.println("after translation ="+string);
        }

答案 2 :(得分:0)

String toTranslate = "I ";
String translated = "Ich ";
a = a.replaceAll(toTranslate.toLowerCase(), translated.toLowerCase());

如果你在“I”之后添加一个空格,它应该在单词“Ich”中替换它,但是如果你的单词以“I”结尾那么那就是另一个问题

答案 3 :(得分:0)

如果您认为I将始终用英语大写,那么

a = a.replaceAll(toTranslate, translated);

会起作用,否则你需要更换两种情况

a = a.replaceAll(toTranslate, translated);
a = a.replaceAll("([^a-zA-Z])("+toTranslate.toLowerCase()+")([^a-zA-Z])", "$1"+translated.toLowerCase()+"$3");

这是一个有效的example

答案 4 :(得分:0)

是的,单词边界是解决方案。我只是在正则表达式中做到了这一点:

text.replaceAll("\\b" + parts1[i] + "\\b", map.element.value);

不要与第二个参数混淆它的字符串(来自Hash表)。

答案 5 :(得分:-1)

您可以使用RegEx的单词绑定,即\ b

String toTranslate = "\\bI\\b";
String translated = "Ich";
a = a.replaceAll(toTranslate.toLowerCase(), translated.toLowerCase());

这应该确保我完全分成了自己的单词

编辑:我误解了这个问题并意识到你想要整个单词。见上文,因为我已经解释了