java - 如何处理不可打印值的 "print"字节数组

标签 java arrays string representation

我在这个论坛上看到了很多相关的问题和答案,但没有找到任何可以解决我的问题的内容。

这个想法很简单:

(这是使用 Java 编程语言 - 我目前仅限于使用 Java 7)

接收到一个字节数组(代表任何内容:某种有线格式、某种形式的编码数据、嵌入“文本”的二进制数据等)。我希望能够以以下形式打印数组:

  1. 作为十六进制字符串
  2. 作为“可打印”文本

第一种情况部分是出于调试原因,但也可能在非 Debug模式下使用。第二种情况纯粹是出于调试原因,并且允许与其他信息源进行人工比较。

我认为我对第一种情况有解决方案,但在第二种情况下遇到了困难。

显然,字节数组可能包含不可打印的字符或以不同方式呈现的字符。如何“打印”数组以便表示所有字节?我可以提供的一个很好的类比是 UNIX od 命令,其中 od -ah 以十六进制形式显示二进制数据以及 ASCII 字符。在这种情况下,点 (.) 通常用于代替不可打印或控制字符。

我不需要它看起来像od输出的那样,但希望能够显示数据,以便至少可以看到可打印的字符,其余的用某种占位符。另外,我不想删除不可打印的字符,因为这会产生误导性的数据表示。

如果有人知道如何实现这一目标,我将非常感激。

最佳答案

试试这个#2:

String original = new String(bytes);
String printable = original.replaceAll("\\P{Print}", ".")); //Or any other character instead of "." you want

它使用POSIX printable character class .

如果您需要 Unicode 支持,请使用 utf-8 字符集参数创建字符串,并使用 UNICODE_CHARACTER_CLASS 构造一个模式。标记并使用与上面相同的正则表达式。

关于java - 如何处理不可打印值的 "print"字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50220038/

相关文章:

java - 部署数据库时出错

java - spring boot + junit + 重写的组件实例

java - 正则表达式获取最后一个值

javascript - 将数组传递给隐藏输入并检索具有不同索引上的元素的数组

javascript - 从 JS 数组中删除非 0 假值的最简单方法是什么?

javascript - IE7 Javascript 和使用字符串作为数组

java - 在 Java 中从给定的字母表生成所有长度为 N 的单词

java - @Valid 带有 spring 注解

Java List<string> 在使用 Arrays.asList() 后未添加到列表

r - 在 R 中拆分字符串并生成频率表