Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java “如何处理字符”#&引用;用正则表达式?_Java_Regex_String - Fatal编程技术网

Java “如何处理字符”#&引用;用正则表达式?

Java “如何处理字符”#&引用;用正则表达式?,java,regex,string,Java,Regex,String,我正在尝试下面的代码: String txt = "D D#"; String txt2 = txt.replaceAll("\\bD\\b", "x").replaceAll("\\bD#\\b", "y"); 我正在等待获取“xy”,但它返回“xx#”。解决方案是什么?根据您编辑的问题,您希望使用单词边界进行替换 您可以使用此代码来修复: String txt = "D D#"; String txt2 = txt.replaceAll("\\bD#", "y").replaceAll("

我正在尝试下面的代码:

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

我正在等待获取
“xy”
,但它返回
“xx#”
。解决方案是什么?

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

您可以使用此代码来修复:

String txt = "D D#";
String txt2 = txt.replaceAll("\\bD#", "y").replaceAll("\\bD\\b", "x");
//=> "x y"
注意这些变化:

  • 在将所有单词替换为
    D
    x
    的其他
    replaceAll
    之前调用
    .replaceAll(“\\bD#”,“y”)
  • #
    之后不使用单词边界
    \\b
    ,因为单词边界在非单词字符之后不匹配<代码>\b为
    (^\w |\w$|\w\w |\w\w)
    位置断言
  • 还请注意,您也可以使用
    replaceFirst
    而不是
    replaceAll
    ,并将代码保留为:

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

    下面是发生的情况:“D D”->“x x”->“x x”。。。因此,您需要从替换“D#”开始。在调用第二个
    replaceAll()
    时,所有的D都替换为x。试试
    .replaceAll(“x#”,y”)调用
    。先替换(“D#”,“y”)
    然后调用
    。替换(“D”,“x”)
    。无需使用
    replaceAll
    ,因为这里没有使用正则表达式。@anubhava已编辑!然后使用:
    .replaceAll(“\\bD#”,“y”).replaceAll(\\bD\\b”,“x”)
    您不能在
    .
    之后使用
    \\b
    ,因为它不是单词字符。它刚刚回答了!谢谢您能详细介绍一下replaceFirst()吗?
    replaceFirst
    只替换输入中第一个匹配的文本。