在我的程序中,我将逐行读取一个java文件,如果该行中有任何字符串文字,我将用(比如说)“ABC”替换它。
是否有任何正则表达式可以这样做?
例如。如果传递给我的程序的 Java 文件是:
public class TestClass {
private static final boolean isNotThis = false;
public static void main(String[] args) {
String x = "This is a test String";
dummyMethodCall();
if(isNotThis){
makeItThat();
System.out.println("work is done");
}
}
}
那么输出的java文件应该是:
public class TestClass {
private static final boolean isNotThis = false;
public static void main(String[] args) {
String x = "ABC";
dummyMethodCall();
if(isNotThis){
makeItThat();
System.out.println("ABC");
}
}
}
我愿意知道正则表达式,它将帮助我检测所有字符串文字并将它们替换为我选择的特定字符串。
编辑:
对我来说真正的挑战是避免字符串中的引号字符。 (如果有人在字符串中放置了带有转义字符的引号字符)
最佳答案
考虑以下正则表达式:
String regex = "\"(?:\\\\\"|[^\"])*?\"";
它以引号开头,后跟零个或多个非引号字符或转义引号字符。最后一个字符必须是引号。
如果将此正则表达式应用于 java 代码,请记住它还会匹配注释中引号内的文本。如果您的评论中有不平衡的引号,它将与字符串文字不匹配(然后它将匹配完全相反的内容)。
如果您在名为 example
的 String
变量中发布了示例,则以下内容将起作用:
String wanted = example.replaceAll(regex, "\"ABC\"");
这是一个完整的示例:
String literal = "String foo = \"bar\" + \"with\\\"escape\" + \"baz\";";
String regex = "\"(?:\\\\\"|[^\"])*?\"";
String replacement = "\"\"";
String wanted = literal.replaceAll(regex, replacement);
System.out.println(literal);
System.out.println(wanted);
打印
String foo = "bar" + "with\"escape" + "baz";
String foo = "" + "" + "";
关于java - 正则表达式替换 Java 文件中的所有字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18547501/