我想删除某些日志条目以解析文件。但是,在运行BufferedReader和其他导入的函数和库时,我使用.replaceAll方法运行的代码中出现错误。如何删除" rule_uid:{C1336766-9489-4049-9817-50584D83A245};"没有导致错误?
日志文件:
var s = document.getElementById('t');
var g = s.childNodes[1];
g.childNodes[1].remove();
var foreign = document.createElementNS('http://www.w3.org/2000/svg',"foreignObject");
foreign.setAttribute('width', 500);
foreign.setAttribute('height', 150);
var t = document.createTextNode("This is a paragraph.");
foreign.appendChild(t);
g.appendChild(foreign);
错误:
Jan 1 22:54:17 drop %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:22 drop %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:23 drop %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
Jan 1 22:54:41 drop %LOGSOURCE% >eth1 rule: 7; rule_uid: {C1336766-9489-4049-9817-50584D83A245};
代码:
"Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal repetition near index 9
rule_uid: {C1336766-9489-4049-9817-50584D83A245};" (which is at the .replaceAll() method for rule_uid column)
答案 0 :(得分:1)
在第二次调用replaceAll()
时,输入字符串中有特殊字符,这些字符被解释为正则表达式语法的一部分,而不是要替换的纯文本。一旦我在IntelliJ中转义了这些特殊字符,编译器错误便消失了。
改变这个:
String newtext = oldtext.replaceAll("%LOGSOURCE% >eth1 rule: 7;", "");
String newtext1 = oldtext.replaceAll("rule_uid: {C1336766-9489-4049-9817-50584D83A245};", "");
对此:
String newtext = oldtext.replaceAll("%LOGSOURCE% >eth1 rule: 7;", "");
String newtext1 = oldtext.replaceAll("rule_uid: \\{C1336766-9489-4049-9817-50584D83A245\\};", "");
我所做的只是用两个前导反斜杠来逃避花括号,例如: \\{
<强>更新强>
您的代码中还有其他一些逻辑问题。以下是我建议您使用的完整代码:
try {
File file = new File("filename");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "", oldtext = "";
while ((line = reader.readLine()) != null) {
oldtext += line + "\r\n";
}
reader.close();
// replace a word in a file
oldtext = oldtext.replaceAll("%LOGSOURCE% >eth1 rule: 7;", "");
oldtext = oldtext.replaceAll("rule_uid: \\{C1336766-9489-4049-9817-50584D83A245\\};", "");
FileWriter writer = new FileWriter("newfilename");
// the entire file is contained within the String 'oldtext'
// you only need one write operation to output it
writer.write(oldtext);
writer.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}