Java 代码无法识别 ctrl-m(^M) 但适用于其他 ctrl-字符(^Q、^A、^T 等)Linux

Java code does not recognize ctrl-m(^M) but works fine for other ctrl-characters(^Q,^A,^T etc) Linux

我有一个要求,需要从 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

我已经尝试了所有可用的表示形式 (octal/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();
        }
    }
}

逐个字符而不是逐行读取怎么样?那么替换似乎微不足道。

总结一下评论:文件是用 BufferedReader.readLine() 逐行读取的。 readline 剥离了换行符 ^M (\r),因此它永远不会进入稍后搜索的 String