Java -修剪字节数组的尾随空格

yhuiod9q  于 2023-04-04  发布在  Java
关注(0)|答案(6)|浏览(176)

我有一个类似的字节数组:

[77, 83, 65, 80, 79, 67, 32, 32, 32, 32, 32, 32, 32]

大致等于

[M , S, A, P, O, C,  ,  ,  ,  ,  ,  ,  ] when printed as chars.

现在我想修剪尾部的空白,使其看起来像:

[77, 83, 65, 80, 79, 67]

最简单的办法是什么?

编辑:我不想处理字符串,因为有可能是不可打印的字节,我不能失去这些数据。它需要字节数组:(每当我转换为字符串时,像01(SOH)02(STX)等字节都会丢失。
编辑2澄清一下,如果将字节数组转换为字符串,会丢失数据吗?现在有点困惑,如果字节是不同的字符集呢?

zhte4eai

zhte4eai2#

最简单的方法?没有效率或性能的保证,但它似乎很容易。

byte[] results = new String(yourBytes).trim().getBytes();
iovurdzv

iovurdzv3#

  • 将字节更改为字符串
  • 调用text = text.replaceAll("\\s+$", ""); // remove only the trailing white space
  • 将字符串更改为字节
bpzcxfmw

bpzcxfmw4#

修改字符串trim()byte[]。它不仅削减了数组的尾部,而且还削减了头部。

public byte[] trimArray(byte[] source) {
    int len = source.length;
    int st = 0;
    byte[] val = source;

    while ((st < len) && (val[st] <= SPACE)) {
        st++;
    }
    while ((st < len) && (val[len - 1] <= SPACE)) {
        len--;
    }
    byte[] result;
    if ((st > 0) || (len < source.length)) {
        result = new byte[len - st];
        System.arraycopy(source, st, result, 0, result.length);
    } else {
        result = source;
    }

    return result;
}
yi0zb3m4

yi0zb3m45#

这里是@matt-ball答案的Kotlin版本。

private val zero = 0.toByte()
    private fun trim(src: ByteArray): ByteArray {
        var i = src.size
        while (i-- > 0 && src[i] == zero) {
        }

        val dst = ByteArray(i + 1)
        System.arraycopy(src, 0, dst, 0, i + 1)
        return dst
    }

如何使用瓦尔arrTrimmed =

i5desfxk

i5desfxk6#

String s = new String(arrayWithWhitespace);
s = s.trim();
byte[] arrayWithoutWhitespace = s.getBytes();

相关问题