Java 如何检测和替换字符[]中的换行符?

Java 如何检测和替换字符[]中的换行符?,java,char,Java,Char,我的应用程序使用套接字连接到服务器并读取数据。数据的长度最多为四个字符,但有时会小于此长度。数据附加了一个crlf组合,我不想在下一步处理中出现这个组合 因为我不想读取超过四个字符,所以我有一个char[4]缓冲区。然后,为了说明数据少于四个字符的时间(以及CR和LF字符逐渐进入),我有: for(int i = 0; i < 4; i++) { String hexString = Integer.toHexString(buffer[i] | 0x10000).substrin

我的应用程序使用套接字连接到服务器并读取数据。数据的长度最多为四个字符,但有时会小于此长度。数据附加了一个crlf组合,我不想在下一步处理中出现这个组合

因为我不想读取超过四个字符,所以我有一个
char[4]
缓冲区。然后,为了说明数据少于四个字符的时间(以及CR和LF字符逐渐进入),我有:

for(int i = 0; i < 4; i++) {
    String hexString = Integer.toHexString(buffer[i] | 0x10000).substring(1);
    if((hexString == "000d") || (hexString == "000a")) {
        buffer[i]='0';
    }
}
for(int i=0;i<4;i++){
字符串hexString=Integer.toHexString(缓冲区[i]| 0x10000)。子字符串(1);
如果((hexString==“000d”)| |(hexString==“000a”)){
缓冲区[i]=“0”;
}
}
通过明智的日志记录,我可以看到循环按预期执行,但不会覆盖CR(U+000d)和LF(U+000a)字符。我希望上面的代码用“0”替换回车符或换行符的任何实例,但缓冲区的内容似乎没有改变

老实说,无论如何,这感觉像是一种笨拙的方式,所以我的问题分为两部分:

  • 我的代码有什么问题?如何修复它以使其按预期运行
  • 有更好的方法吗

  • 听起来您最好先使用
    BufferedReader
    及其
    readLine()
    方法:

    BufferedReader reader = new BufferedReader(new InputStreamReader(stream, charset));
    try {
        String line;
        while ((line = reader.readLine()) != null) {
            processLine(line);
        }
    } finally {
        reader.close();
    }
    

    这里的行没有行分隔符,您也不必担心对
    read
    的单个调用是否会在一行的中途结束等。

    谢谢Jon-这确实更有意义。比较字符的十六进制值似乎是一种笨拙且容易出错的方法。你有没有检查过你的
    if
    语句是否真的对换行符感到满意?既然你已经有了一个很好的答案,我就解释一下为什么你的代码不起作用。不能将字符串与==进行比较,因为如果字符串是实际的同一实例,则会进行比较。使用.equals时,您的代码至少应该可以工作。@RogerLindsjö谢谢。这有点违反直觉,但仔细想想,这是有道理的。