替换所有字符串int java源代码

问题描述

我正在尝试替换 Java 格式的源代码中的每个声明的 String(使用 java 本身)。删除字符串的源代码可能如下所示(>...

package a.b;

import b.a.*;

@SomeAnnotation(>"abc"<)
public class XY extends YZ {

    String s = >"Hello \"World\""<;

    public static void main(String[] args) {
        System.out.println(>"Hello World"<);
    }
}

想象一下这一切都存储在一个字符串中,可能没有换行符。我现在需要一个可以找到所有这些的正则表达式。我在处理字符串内的转义引号时遇到了问题。我最好的选择是".*[^\]"

只要不超过注释,它是否会检测到这些在注释里面都没有关系。

解决方法

如果您使用 BufferedLineReader 在另一个 Java 应用程序中阅读源代码并检查每一行,您可以使用以下正则表达式:

(?:\>\")(([\w\s]*)(\\"(?!\<)))*(?:\"\<)

但是,在 java replace 方法中使用时,您可能希望转义所有反斜杠。

例如:

lineAsString.replace((?:\\>\\")(([\\w\\s]*)(\\\\"(?!\\<)))*(?:\\"\\<),"youReplacementString");

也许需要额外的转义序列。此外,您可能希望在 \w\s 旁边的字符串中添加更多允许的特殊字符。

我建议将该正则表达式粘贴到像 https://regex101.com/ 这样的正则表达式检查器和您的示例代码中以获得更多解释。