Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.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 - Fatal编程技术网

Java 仅在不成对时更换

Java 仅在不成对时更换,java,Java,我有下面的字符串 <b>bold</b> ...... <b>bold1..... <b>bold2</b> <u>12333</u> 粗体。。。。。。黑体字1。。。。。黑体字12333 我想要这个 <b>bold</b> ...... &lt;b&gt;bold1..... <b>bold2</b> <u>12333</u&g

我有下面的字符串

<b>bold</b> ...... <b>bold1..... <b>bold2</b> <u>12333</u>
粗体。。。。。。黑体字1。。。。。黑体字12333
我想要这个

<b>bold</b> ...... &lt;b&gt;bold1..... <b>bold2</b> <u>12333</u> 
粗体。。。。。。bbold1。。。。。黑体字12333
i、 e仅当未完成
配对时,才更换


我正在尝试
replaceAll(“,”)
,但不知道如何避免出现配对。

使用简单的
replaceAll
无法做到这一点。我建议这样做(对于
..
对;对于
/
再次这样做):

  • 搜索字符串并查找所有
    字符串的偏移量。(一个好的数据结构是将偏移推送到堆栈上。)
  • 对所有
    字符串执行相同的操作
  • 从末端开始工作(弹出堆栈),检查偏移是否正确配对(即,
    的上一个偏移大于
    的上一个偏移,而
    的上一个偏移又大于
    的下一个上一个偏移)
  • 当发现不匹配时,在相关偏移量处进行适当的替换。在各种不匹配情况下(包括处理一个堆栈为空)的操作逻辑留给读者作为练习。:)
  • 重复此操作,直到处理完所有偏移
  • 从末尾开始工作的原因是,当用
    替换
    和用code/code替换code>时,不需要调整剩余的偏移量


    另一种策略是一次复制一个字符,当您到达
    时暂停复制。使用简单的
    replaceAll
    无法完成此操作。我建议这样做(对于
    ..
    对;对于
    /
    再次这样做):

  • 搜索字符串并查找所有
    字符串的偏移量。(一个好的数据结构是将偏移推送到堆栈上。)
  • 对所有
    字符串执行相同的操作
  • 从末端开始工作(弹出堆栈),检查偏移是否正确配对(即,
    的上一个偏移大于
    的上一个偏移,而
    的上一个偏移又大于
    的下一个上一个偏移)
  • 当发现不匹配时,在相关偏移量处进行适当的替换。在各种不匹配情况下(包括处理一个堆栈为空)的操作逻辑留给读者作为练习。:)
  • 重复此操作,直到处理完所有偏移
  • 从末尾开始工作的原因是,当用
    替换
    和用code/code替换code>
    时,不需要调整剩余的偏移量


    另一种策略是一次复制一个字符,当您到达
    时暂停复制。使用简单的
    replaceAll
    无法完成此操作。我建议这样做(对于
    ..
    对;对于
    /
    再次这样做):

  • 搜索字符串并查找所有
    字符串的偏移量。(一个好的数据结构是将偏移推送到堆栈上。)
  • 对所有
    字符串执行相同的操作
  • 从末端开始工作(弹出堆栈),检查偏移是否正确配对(即,
    的上一个偏移大于
    的上一个偏移,而
    的上一个偏移又大于
    的下一个上一个偏移)
  • 当发现不匹配时,在相关偏移量处进行适当的替换。在各种不匹配情况下(包括处理一个堆栈为空)的操作逻辑留给读者作为练习。:)
  • 重复此操作,直到处理完所有偏移
  • 从末尾开始工作的原因是,当用
    替换
    和用code/code替换code>
    时,不需要调整剩余的偏移量


    另一种策略是一次复制一个字符,当您到达
    时暂停复制。使用简单的
    replaceAll
    无法完成此操作。我建议这样做(对于
    ..
    对;对于
    /
    再次这样做):

  • 搜索字符串并查找所有
    字符串的偏移量。(一个好的数据结构是将偏移推送到堆栈上。)
  • 对所有
    字符串执行相同的操作
  • 从末端开始工作(弹出堆栈),检查偏移是否正确配对(即,
    的上一个偏移大于
    的上一个偏移,而
    的上一个偏移又大于
    的下一个上一个偏移)
  • 当发现不匹配时,在相关偏移量处进行适当的替换。在各种不匹配情况下(包括处理一个堆栈为空)的操作逻辑留给读者作为练习。:)
  • 重复此操作,直到处理完所有偏移
  • 从末尾开始工作的原因是,当用
    替换
    和用code/code替换code>
    时,不需要调整剩余的偏移量


    另一种策略是一次复制一个字符,当你到达一个
    时暂停复制。好吧,我不是发布外部库来提供帮助的朋友

    但既然我已经试过了,而且必须说它工作正常,我就告诉你:

    html清洁器读取html数据并将其清除

    如果您有一个格式不正确的xml文档,htmlcleaner将添加/删除缺少的标记,并从中生成一个格式正确的文档


    如果你不喜欢外部图书馆,你必须看看@Ted Hopp的答案,他清楚地指出了如何解决你的问题…

    好吧-我不是发布外部图书馆来提供帮助的朋友

    但是自从我
    str = str.replaceAll("(?i)<([a-z])>(?![^<]*</\\1>)", "&lt;$1&gt;");
    
    String str = "<b>bold</b> ...... <b>bold1..... <b>bold2</b> <u>12333</u>";
    str = str.replaceAll("(?i)<([a-z])>(?![^<]*</\\1>)", "&lt;$1&gt;");
    System.out.println(str);
    
    <b>bold</b> ...... &lt;b&gt;bold1..... <b>bold2</b> <u>12333</u>