java - Java:System.out.println 方法在打印字节数组时丢失了一些行
问题描述
我有一个字节数组,然后我通过字节数组创建一个新字符串,当我调试和评估字符串时,值是正确的。但是在我打印出来之后,它丢失了一些行。
byte[] bytes = {50, 48, 49, 57, 45, 49, 48, 45, 50, 50, 32, 49, 55, 58, 52, 56, 58, 48, 52, 44, 51, 53, 56, 32, 73, 78, 70, 79, 32, 91, 104, 116, 116, 112, 45, 110, 105, 111, 45, 56, 48, 56, 53, 45, 101, 120, 101, 99, 45, 49, 93, 40, 69, 120, 101, 99, 117, 116, 101, 67, 111, 109, 109, 97, 110, 100, 46, 106, 97, 118, 97, 58, 54, 48, 41, 45, 32, 76, 97, 115, 116, 32, 108, 111, 103, 105, 110, 58, 32, 84, 117, 101, 32, 79, 99, 116, 32, 50, 50, 32, 49, 55, 58, 51, 56, 58, 51, 55, 32, 50, 48, 49, 57, 32, 102, 114, 111, 109, 32, 49, 48, 46, 50, 53, 51, 46, 55, 46, 50, 54, 13, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 95, 13, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 95, 41, 13, 10, 32, 32, 95, 32, 32, 32, 95, 32, 95, 32, 95, 95, 32, 32, 95, 32, 32, 95, 95, 95, 32, 95, 95, 95, 32, 32, 95, 32, 95, 95, 32, 95, 95, 95, 13, 10, 32, 124, 32, 124, 32, 124, 32, 124, 32, 39, 95, 32, 92, 124, 32, 124, 47, 32, 95, 95, 47, 32, 95, 32, 92, 124, 32, 39, 95, 32, 96, 32, 95, 32, 92, 13, 10, 32, 124, 32, 124, 95, 124, 32, 124, 32, 124, 32, 124, 32, 124, 32, 124, 32, 40, 95, 124, 32, 40, 95, 41, 32, 124, 32, 124, 32, 124, 32, 124, 32, 124, 32, 124, 13, 10, 32, 32, 92, 95, 95, 44, 95, 124, 95, 124, 32, 124, 95, 124, 95, 124, 92, 95, 95, 95, 92, 95, 95, 95, 47, 124, 95, 124, 32, 124, 95, 124, 32, 124, 95, 124, 13, 10, 13, 10, 13, 10, 91, 122, 97, 105, 98, 101, 105, 64, 48, 49, 108, 49, 53, 98, 48, 48, 51, 32, 126, 93, 36, 32, 115, 115, 104, 32, 114, 111, 111, 116, 64, 49, 48, 46, 50, 51, 56, 46, 48, 46, 53, 52, 13, 10, 114, 111, 111, 116, 64, 49, 48, 46, 50, 51, 56, 46, 48, 46, 53, 52, 39, 115, 32, 112, 97, 115, 115, 119, 111, 114, 100, 58, 32, 13, 10, 76, 97, 115, 116, 32, 108, 111, 103, 105, 110, 58, 32, 84, 117, 101, 32, 79, 99, 116, 32, 50, 50, 32, 49, 54, 58, 53, 57, 58, 51, 48, 32, 50, 48, 49, 57, 32, 102, 114, 111, 109, 32, 49, 48, 46, 49, 55, 50, 46, 52, 57, 46, 49, 13, 13, 10, 91, 114, 111, 111, 116, 64, 122, 98, 110, 98, 117, 109, 97, 115, 117, 97, 116, 32, 126, 93, 35, 32, 98, 112, 114, 101, 115, 116, 111, 114, 101, 32, 45, 115, 32, 50, 48, 49, 57, 45, 49, 48, 45, 50, 50, 32, 49, 52, 58, 49, 48, 58, 53, 53, 32, 45, 101, 32, 50, 48, 49, 57, 45, 49, 48, 45, 50, 50, 32, 49, 52, 58, 49, 48, 58, 53, 53, 32, 45, 67, 32, 13, 32, 109, 97, 115, 116, 101, 114, 49, 32, 45, 68, 32, 109, 97, 115, 116, 101, 114, 49, 32, 47, 101, 116, 99, 47, 104, 111, 115, 116, 115, 13, 10, 91, 114, 111, 111, 116, 64, 122, 98, 110, 98, 117, 109, 97, 115, 117, 97, 116, 32, 126, 93, 35, 13, 10};
String s = new String(bytes,"UTF-8");
System.out.println(s);
当我调试和评估字符串 s 时,它包含:
[root@zbnbumasuat ~]# bprestore -s 2019-10-22 14:10:55 -e 2019-10-22 14:10:55 -C
master1 -D master1 /etc/hosts
但是当我打印出来它丢失了行并且只得到下面的结果:
master1 -D master1 /etc/hosts
所以任何人都可以帮我弄清楚发生了什么,这是jdk的错误吗?
我的 jdk 版本是
java 版本 "1.8.0_161" Java(TM) SE Runtime Environment (build 1.8.0_161-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)
我让我的朋友运行代码,他得到了相同的结果。当我在一些在线java工具中运行时,结果还可以。
解决方案
“新行”应该是
\r (Mac)
\n (Linux)
\r\n (Windows)
因为您使用的不是 Mac,如果控制台遇到独立的 \r,它会将光标移动到行首并覆盖上一行而不是创建新行。
您可以检查此代码的结果:
System.out.println("------------------------");
System.out.println(new String(new byte[]{'a', 13, 'b'}));
System.out.println("------------------------");
System.out.println(new String(new byte[]{'a', 10, 'b'}));
System.out.println("------------------------");
System.out.println(new String(new byte[]{'a', 13, 10, 'b'}));
System.out.println("------------------------");
结果:
------------------------
b
------------------------
a
b
------------------------
a
b
------------------------
那么,如何修复呢?只需删除独立的 \r 或将其替换为 \r\n (或 \n)
推荐阅读
- objective-c - 点击消息应用时 UIActivityController 崩溃
- sql - 返回找到的任何单词的 SQL 查询
- .net - .Net Core API 相同的 url 不同的租户有效负载
- angular - 如何从使用的组件导航到另一个组件,从方法?
- authentication - 有没有办法在不使用数据库的情况下在 Blazor 中进行外部身份验证?
- javascript - 如何创建一个对事件做出反应以加载更多数据的钩子?
- c++ - push_back 是否改变了存储在其向量中的类型的结构?
- reactjs - 在 Gatsby 中使用 GraphQL 和 React 进行小型 API 查询
- html - 引导列不在容器中,并且它们之间没有空间
- java - 可以每天自动更新 CSS 文件吗?