如何删除十六进制格式字符串的一些中间部分以获取新字符串?

时间:2014-03-13 14:20:27

标签: java android string hex substring

HEX STREAM:

字符串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 HEGEMON 1 2 3 4 5 6C C2&#34 ;;

想要将此字符串更改为 -

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&#34 ;;

所以我想要的是从字符串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&#34 ;;

我以为我错过了一个(上面的粗体),虽然我没有理由这样做 -

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

然后又是同样的输出。

2 个答案:

答案 0 :(得分: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.我从索引开始第二组,因为子串从起始索引(包含)拉出,我使用第11组起始索引,因为子串将停在最后一个索引(独占)。这会切断字符串的所需部分。

警告

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

答案 1 :(得分:0)

方法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,"");

应该有效