gpt4 book ai didi

java - 将所有新行分隔符从 cr 或 crlf on bytes 更改为 crlf

转载 作者:行者123 更新时间:2023-12-01 23:41:37 25 4
gpt4 key购买 nike

我需要将所有新行分隔符更改为\r\n。在字节表中有一些\r 和一些\r\n

byte[] data = (byte[])transformedToByteObject;

数据包含该字节,但我不知道如何处理该更改,我只需要处理字节和字节,无法转换为字符串

最佳答案

首先,您需要了解换行符只是相对于特定字符编码的换行符。幸运的是,几乎每个字符编码在底端都使用相同的 ASCII 集,而\n 和\r 是其中的一部分。

有多种方法可以解决此问题,但效率与复杂性的程度各不相同。采取低效率但低复杂度的方法:

迭代 transformedToByteObject 数组,如果字符不是 (byte) '\r',则将其复制到目标数组。

如果是'\r',那么您也将其复制到目标数组,但检查下一个字符是否是'\n'。如果不是,则将其插入到目标数组中。

一些提示:您的目标数组最多是输入数组的 2 倍(最坏的情况下,您的输入数组充满了 '\r')。因此,您可以使用 transformedToByteObject.length * 2 初始化您的目标。保留实际写入字节数的计数器,一旦知道转换后的长度,就使用 System.arrayCopy() 将这些字节复制到另一个具有精确大小的字节数组中。

这样的实现可能如下所示:

final byte[] original = ...;
final byte[] transformed = new byte[original.length * 2];
int len = 0;

for (int i = 0; i < original.length; i++) // for each original byte ...
{
transformed[len] = original[i];         // copy the byte
len++;                                  // track the number of transformed bytes written

if (original[i] == (byte) '\r')         // if this is a \r ...
{
if (i + 1 < original.length &&        // ... and there is a character that follows ...
original[i+1] != (byte) '\n')     // ... and that character is not a \n ...
{
transformed[len] = (byte) '\n'; // ... insert a \n
len++; // ... being sure to track the number of bytes written
}
}
}

final byte[] result = new byte[len];              // prepare an exact sized array
System.arrayCopy(transformed, 0, result, 0, len); // and copy the transformed bytes into it

关于java - 将所有新行分隔符从 cr 或 crlf on bytes 更改为 crlf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17834773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com