You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中查找字符串字节索引及移除0x80字符的技术问询

问题分析与解决方案

首先,你遇到的lastIndexOf(0x80)返回-1的核心原因是字符串编码的问题:

当你把包含0x80的字节数组转成String时,你的hexStringToBin方法大概率用了UTF-8编码。但UTF-8中,0x80是一个无效的单字节(UTF-8单字节范围是0x00-0x7F,多字节起始是0xC0及以上),Java的UTF-8解码器会自动把这个无效字节替换成替换字符U+FFFD(就是你看到的�)。这时候你的字符串里根本没有U+0080(也就是int值0x80对应的字符),自然找不到它。

要实现无需转十六进制就移除0x80的需求,你需要先确保字节数组转字符串时,能保留0x80对应的原始字符,再进行移除操作。


具体解决步骤

  1. 用ISO-8859-1编码转字节数组为字符串
    ISO-8859-1(又称Latin-1)编码会把每个字节直接映射到对应的Unicode码点(0x00-0xFF对应U+0000到U+00FF),这样0x80字节就会被正确转成U+0080字符,而不是替换成�。

  2. 移除U+0080字符
    此时你可以直接用字符串的replace方法,或者通过lastIndexOf找到位置后截取字符串。


修正后的代码示例

import java.nio.charset.StandardCharsets;

public class Main {
    public static void main(String[] args) {
        String hexValue = "73657269616C6E6F80";
        // 十六进制字符串转字节数组
        byte[] byteArray = hexToByteArray(hexValue);
        // 用ISO-8859-1编码转成String,保留原始字节对应的字符
        String originalStr = new String(byteArray, StandardCharsets.ISO_8859_1);
        
        System.out.println("原始字符串: " + originalStr);
        // 方法1:直接替换U+0080字符
        String cleanedStr1 = originalStr.replace("\u0080", "");
        System.out.println("替换后结果: " + cleanedStr1);
        
        // 方法2:通过lastIndexOf定位后截取
        int targetIndex = originalStr.lastIndexOf(0x80);
        if (targetIndex != -1) {
            String cleanedStr2 = originalStr.substring(0, targetIndex);
            System.out.println("截取后结果: " + cleanedStr2);
        }
    }

    // 实现十六进制字符串转字节数组的工具方法
    private static byte[] hexToByteArray(String hexStr) {
        int length = hexStr.length();
        byte[] result = new byte[length / 2];
        for (int i = 0; i < length; i += 2) {
            result[i / 2] = (byte) ((Character.digit(hexStr.charAt(i), 16) << 4)
                    + Character.digit(hexStr.charAt(i + 1), 16));
        }
        return result;
    }
}

额外提醒

如果你之后需要把处理后的字符串转回字节数组,一定要用同样的ISO-8859-1编码,否则会出现字节不匹配的问题。比如:

byte[] cleanedBytes = cleanedStr1.getBytes(StandardCharsets.ISO_8859_1);

内容的提问来源于stack exchange,提问作者utarid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:20:39