【问题标题】:How to remove some middle part of hex format string to get new string?如何删除十六进制格式字符串的中间部分以获取新字符串?
【发布时间】:2014-04-18 08:33:22
【问题描述】:

十六进制流:

字符串 hexCodeFromBB = "7D44 13 05 00 06 0E 01 11 13 04 03 03 00 FE E0 AD AP 06 08 01 02 03 04 05 06 07 08 14 00 FD 14 02 11 05 01 0C 霸主 1 2 3 4 5 6C C2";

想把这个字符串改成-

String newHexCodeFromBB = "7D44 13 03 00 FE E0 AD AP 06 08 01 02 03 04 05 06 07 08 14 00 FD 14 02 11 05 01 0C HEGEMON 1 2 3 4 5 6C C2";

所以我只想从字符串 hexCodeFromBB 中去掉那些粗体字节。

这是我尝试过的-

String codeSplitter[] = hexCodeFromBB.split(" ");

//newHexCodeFromBB = hexCodeFromBB.replace(hexCodeFromBB.substring(2,10),"");

newHexCodeFromBB = hexCodeFromBB.replace(hexCodeFromBB.substring(hexCodeFromBB.indexOf(codeSplitter[2]),hexCodeFromBB.indexOf(codeSplitter[10])),"");

这是不正确的。

我得到-

newHexCodeFromBB = "7D44 13 03 03 00 FE E0 AD AP 06 08 01 02 03 04 05 06 07 08 14 00 FD 14 02 11 05 01 0C HEGEMON 1 2 3 4 5 6C C2";

我以为我错过了一个(上面的粗体),虽然没有理由所以我尝试了-

newHexCodeFromBB = hexCodeFromBB.replace(
         hexCodeFromBB.substring(
            hexCodeFromBB.indexOf(codeSplitter[2]),
            hexCodeFromBB.indexOf(codeSplitter[11])),"");

但又是相同的输出。

【问题讨论】:

    标签: java android string hex substring


    【解决方案1】:

    codeSplitter[10] 交换到codeSplitter[11] 时遇到的问题是这两个值都包含相同的字符串:"03" 所以你从调用索引获得的索引是相同的两者,因此输出结果相同。

    给定这个字符串,你的元素大小是 3 个字符宽,你有两个十六进制数字和一个空格。您可以通过找到您想要的最后一个位置的索引并向其添加 3 来解决此解决方案,例如在这个 ideone 中:http://ideone.com/Pem3Bt

    然而,这样做的问题是,如果在字符串的开始部分和结束部分之间出现相同类型 - 所以你需要改变计算索引的方式。

    附录

    另一种解决方案(假设您总是删除字符串的第 2 到第 10 个十六进制部分,您可以在此处使用类似以下内容:http://ideone.com/kUQSHc,它计算子字符串的索引。

    int start = 2 * 3 + 2;
    int end = 11 * 3 + 2;
    

    在这些计算中,3 是我们跳过的字符数,+ 2 是一个调整值,因为第一个“组”十六进制字符是 4 个字符而不是 3 个字符。我从第 2 组,因为子字符串从起始索引中提取(包括),而我使用第 11 组起始索引,因为子字符串将在最后一个索引处停止(不包括)。这会切断字符串的所需部分。

    警告

    如果你使用我这里提出的方法它会做一些假设,最重要的是字符串的字符串格式不会改变。只要索引只指向两个字符组,它们就可以更改。您可能需要对字符串进行更多发现才能实际计算出您真正想要剪切的所需位置。

    【讨论】:

    • 似乎很有用。在找到最有效的方法或任何好的方法后会回来。
    【解决方案2】:

    方法String.substring(beginIndex, endIndex) 包含索引为beginIndex 的值,排除索引为endIndex 的值,所以在末尾索引加一。

    "01234".substring(0,1)=="0"
    

    另一个问题是String.indexOf(str):你没有考虑第二场比赛的长度:

    "01234".indexOf("23")==2 
    "01234".indexOf("2")==2
    "01234".indexOf("3")==3
    

    所以

    newHexCodeFromBB = 
         hexCodeFromBB.replace(
                 hexCodeFromBB.substring(hexCodeFromBB.indexOf(codeSplitter[2]),
                 hexCodeFromBB.indexOf(codeSplitter[11]))+codeSplitter[11].length,"");
    

    应该工作

    【讨论】:

    • 是的,所以我输入了codeSplitter[11] 而不是codeSplitter[10],但没有成功。另请注意,将hexCodeFromBB.substring(2,10) 替换为空白在这里也不起作用。
    • 添加第二部分解释indexOf的问题
    猜你喜欢
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2022-07-08
    • 2014-03-07
    相关资源
    最近更新 更多