在我的程序中,我将逐行读取一个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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么输出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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我愿意知道正则表达式,它将帮助我检测所有字符串文字,并用我选择的特定字符串替换它们.
编辑:
对我来说真正的挑战是避免字符串中的那些引号字符.(如果有人在字符串中放置带有转义字符的引号字符)
请考虑以下正则表达式:
String regex = "\"(?:\\\\\"|[^\"])*?\"";
Run Code Online (Sandbox Code Playgroud)
它以引号开头,后跟零个或多个非引号字符或转义引号字符.最后一个字符必须是引用.
如果将此正则表达式应用于java代码,请记住它还匹配注释中引号内的文本.如果你的评论中有不平衡的引号,它将不匹配字符串文字(它将匹配完全相反的).
如果您有一个String名为example以下变量的示例:
String wanted = example.replaceAll(regex, "\"ABC\"");
Run Code Online (Sandbox Code Playgroud)
这是一个完整的例子:
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);
Run Code Online (Sandbox Code Playgroud)
版画
String foo = "bar" + "with\"escape" + "baz";
String foo = "" + "" + "";
Run Code Online (Sandbox Code Playgroud)