【问题标题】:Search and replace words in Java在 Java 中搜索和替换单词
【发布时间】:2026-02-04 08:20:06
【问题描述】:

我有一个字符串,包含字符a-zA-Z0-9()+-

我想找到该字符串中的每个单词并将其替换为带有'word' 的相同单词(添加了单引号)。该字符串中的单词可以在“(”、“)”和空格之前/之后。

我该怎么做?

输入:

(Movie + 2000)

输出:

('Movie' + '2000')

【问题讨论】:

  • 正则表达式特别适合这种工作;他们会在线性时间内完成,甚至只需要一行代码。
  • 您能否展示一些示例输入和输出。

标签: java string search replace


【解决方案1】:

只有在发生替换时才返回字符串,见下文:

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

【讨论】:

  • 这看起来不像是这个问题的答案。质量很差。考虑阅读 -> *.com/help
【解决方案2】:

正如 cmets 中所述,正则表达式是一个不错的选择:

String input = "(Movie + 2000)";

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

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

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

【讨论】:

  • 谢谢。正是我想要的。
  • 太复杂了。正则表达式已经有“单词边界”的定义 - 它是 \b: See my solution
  • @Bohemian:好吧,我一直忘记这些。这是投反对票的理由吗?
  • 解决方案也不同。如果您想在 crêpe 之类的词周围加上引号,则此解决方案将不起作用。根据您的用例,这可能没问题(我不知道问题的“等”中是否包含非英语字符)。
【解决方案3】:

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

String input = "(Movie + 2000)";

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

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

【讨论】:

    【解决方案4】:
    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();
    }
    }
    

    输出:Hello 'str'ing

    WBR

    【讨论】:

    • 我不知道我必须替换什么词,所以我不能像你那样手动完成。