在Java中搜索和替换单词

时间:2011-06-13 03:44:44

标签: java string search replace

我有一个字符串,包含字符a-zA-Z0-9()+,{{1}等等。

我想找到该字符串中的每个单词,并用-(添加单引号)替换为相同的单词。该字符串中的单词可以在“(”,“)”和空格之前/之后。

我该怎么做?

输入:

'word'

输出:

(Movie + 2000)

4 个答案:

答案 0 :(得分:7)

保持简单!这可以满足您的需求:

String input = "(Movie + 2000)";

input.replaceAll("\\b", "'");  
// Outputs  "('Movie' + '2000')"

这使用正则表达式\b,这是一个“单词边界”。什么可以更简单?

答案 1 :(得分:0)

public class Main {

/**
 * @param args
 */
public static void main(String[] args) {

    String str1 = "Hello string";
    String str2 = "str";

    System.out.println(replace(str1, str2, "'" + str2 + "'"));
}

static String replace(String str, String pattern, String replace) {
    int s = 0;
    int e = 0;
    StringBuffer result = new StringBuffer();

    while ((e = str.indexOf(pattern, s)) >= 0) {
        result.append(str.substring(s, e));
        result.append(replace);
        s = e + pattern.length();
    }
    result.append(str.substring(s));
    return result.toString();
}
}

输出:你好'str'ing

WBR

答案 2 :(得分:0)

正如评论中所述,正则表达式是一个很好的方法:

String input = "(Movie + 2000)";

input = input.replaceAll("[A-Za-z0-9]+", "'$0'");

你没有给出'单词'的精确定义,所以我认为它是字母和数字的任意组合。

编辑好的,感谢@Buhb解释为什么这个解决方案不是最好的解决方案。 @Bohemian给出了更好的解决方案。

答案 3 :(得分:0)

仅在发生替换时返回字符串才有意义,请参阅下文:

if(s>0)
    return result.toString();
else
    return null;