Java代码无法识别ctrl-m(^m),但对于其他ctrl字符(^Q、^A、^T等)Linux可以正常工作

Java代码无法识别ctrl-m(^m),但对于其他ctrl字符(^Q、^A、^T等)Linux可以正常工作,java,linux,control-characters,Java,Linux,Control Characters,我有一个要求,我需要从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 我尝试了所有可用的表示法(八进制/十六进制/un

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

一个字符一个字符地读,而不是一行一行地读,怎么样?替换看起来很简单。

总结一下注释:使用
BufferedReader.readLine()
逐行读取文件。读线去掉了换行符^M(\r),因此它永远不会进入以后搜索的
字符串中。

使用
\r
而不是
^M
@ElliottFrisch:“所有可用的表示法(八进制/十六进制/unicode),包括\r来表示^M”--完成了。。。不工作。
字符串s=s.replaceAll(\\013”,“as”)都是胡说八道。因为你在那一行声明了
s
。Java没有类型
string
。而且您也不可能使用
readLine
阅读。虽然由于
readLine
的原因,
行中不会有
^M
\r
字符,但代码工作正常(有关详细信息,请参阅文档)