我有一个要求,我需要从Linux机器上的Java传入数据中删除两个特定的控制字符:^@
和^M
。
下面提到的部分按预期工作:
String s;
s = s.replaceAll("\\x00","as");
s = s.replaceAll("\\000", "as");
但这些不是:
s = s.replaceAll("\\015", "as"); //Octal
s = s.replaceAll("\\x0D", "as"); //Hex
我已经尝试了所有可用的表示形式(八进制/十六进制/ unicode),包括\r
来代表我的代码中的^M
,但它不起作用。如上所述,一切都适用于其他控制字符。
请建议我是否有任何我没有尝试或错过的事情。
编辑:按要求提供可实现的代码。
public class sampSC {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new FileReader("./samp1.txt"));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
line = br.readLine();
}
String s = sb.toString();
System.out.println(s);
s = s.replaceAll("\\00", "sb"); //works
System.out.println(s);
s = s.replaceAll("\\x11", "s23b"); //works
System.out.println(s);
s = s.replaceAll("\\r$", "aa"); //doesn't work
System.out.println(s);
} finally {
br.close();
}
}
}
答案 0 :(得分:3)
总结评论:文件逐行读取BufferedReader.readLine()
。 readline剥离了换行符^ M(\ r \ n),因此它永远不会进入后来搜索的String
。
答案 1 :(得分:-1)
如何用char而不是逐行读取char?这些替代品似乎微不足道。