有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何处理正则表达式中的字符“#”?

我正在尝试下面的代码:

String txt = "D D#";
String txt2 = txt.replaceAll("\\bD\\b", "x").replaceAll("\\bD#\\b", "y");

我正在等待获取"x y",但它返回"x x#"。解决办法是什么


共 (1) 个答案

  1. # 1 楼答案

    根据您编辑的问题,您希望用单词边界进行替换

    您可以使用此代码修复:

    String txt = "D D#";
    String txt2 = txt.replaceAll("\\bD#", "y").replaceAll("\\bD\\b", "x");
    //=> "x y"
    

    请注意以下变化:

    1. 在其他replaceAll之前调用.replaceAll("\\bD#", "y"),将所有单词替换为Dx
    2. #之后不使用单词边界\\b,因为单词边界在非单词字符之后不匹配^为(^\w|\w$|\W\w|\w\W)位置断言{}

    还请注意,您也可以使用replaceFirst而不是replaceAll,并将代码保留为:

    String txt2 = txt.replaceFirst("\\bD\\b", "x").replaceFirst("\\bD#", "y");