【问题标题】:(java)Detecting carriage return in a InputStream cast to char(java) 检测 InputStream 中的回车符转换为 char
【发布时间】:2017-06-21 19:01:20
【问题描述】:

所以我正在编写一个从串行端口获取输入的程序。 像这样:

String p = "COM3";

    SerialPort in = SerialPort.getCommPort(p);
    in.openPort();

    InputStream d = in.getInputStream();

为了从 port.stream 中读取数据,我使用了以下代码

          do
            {
                System.out.print((char)d.read());
                counter++;

            }while(counter < 303);

仅供参考:来自串行端口的数据来自条形码扫描仪,该程序的目的是扫描驾驶执照。

数据清晰易读,但似乎流中的某处有回车符或换行符,导致数据被分割成新行,这很好,但我想知道如何检测这些字符,以便我可以将每个新行/回车符解析为字符串/字符串数组条目。我进行了一些搜索,但找不到我正在寻找的答案。

我还尝试将流输出到 .txt 文件,但没有太大帮助。当您在记事本中打开文件时,流数据显示为一行。但是在我的文件浏览器预览屏幕中,数据显示了它在我的控制台中的方式,每条单独的数据都有自己的行。

感谢任何帮助。

【问题讨论】:

  • 鉴于您有一个 char someChar = (char) d.read(),那么检测回车的唯一最佳选择就是检查 if( someChar == '\r') (CR=CARRIAGE_RETURN_CHARACTER) 或 if(someChar == '\n') (NL=NEWLINE_CHARACTER)

标签: java inputstream


【解决方案1】:

您需要查找 2 个字符:换行符 \n 和回车符 \r

char next = (char)d.read();
if(next == '\r') {
    System.out.print("\\r");
} else if(char == '\n') {
    System.out.print("\\n");
} else {
    System.out.print(next);
}

当你真的希望它只打印\r\n 时,你必须转义反斜杠,否则它实际上会打印一个新行/回车符并分解文本。如果您必须稍后再读一遍,您需要考虑到在文本中表示这些字符需要 2 个字符。

【讨论】:

    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 2010-10-21
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    相关资源
    最近更新 更多