Java 将字节数组转换为带分隔符的十六进制字符串?是否删除字符串中显示的最后一个字符?

Java 将字节数组转换为带分隔符的十六进制字符串?是否删除字符串中显示的最后一个字符?,java,arrays,string,character-encoding,Java,Arrays,String,Character Encoding,我正在开发一个程序,它将把一个字节数组{13,13,12,12,4,4,4,4}转换成13d:12c:44:44,(十进制为1-15)(十六进制为1-15):然后再转换成下两位数字。我下面的代码可以工作并打印出我想要的内容,除了它的末尾总是包含一个:之外。因此,输出不是(13d:12c:44:44),而是(13d:12c:44:44:)。我尝试使用带有两个条件的else-if语句,但如果有任何数字是连续的,则该语句无效。else-if条件I包含打印(13d:12c:4444) publicsta

我正在开发一个程序,它将把一个字节数组{13,13,12,12,4,4,4,4}转换成13d:12c:44:44,(十进制为1-15)(十六进制为1-15):然后再转换成下两位数字。我下面的代码可以工作并打印出我想要的内容,除了它的末尾总是包含一个:之外。因此,输出不是(13d:12c:44:44),而是(13d:12c:44:44:)。我尝试使用带有两个条件的else-if语句,但如果有任何数字是连续的,则该语句无效。else-if条件I包含打印(13d:12c:4444)

publicstaticvoidmain(字符串[]args){
字节[]pracArray={13,13,12,12,4,4,4};
对于(int i=0;i
}


如果您能为我提供帮助,帮助我在发现重复数字时修复代码,或者帮助我解决代码较少的问题,因为我是初学者。有没有办法不显示字符串中的最后一个字符?这样,我认为我的原始代码可以工作,因为最终字符将始终是a:并且不会被打印。

您使用的if语句太多了,但在我开始之前,让我们先修复您的代码

您的代码可以通过不在if语句中打印冒号来修复,但在末尾放一个if语句,检查它是否是循环的最后一次迭代,并且仅在不是的情况下打印冒号

现在让我们缩短代码:)

for(int i=0;i
我不想用勺子给你答案,因为这在这个网站上是不受欢迎的。到此为止。下面是你应该怎么做

        int[] nums= {13,13,12,12,4,4,4,4};
        String syms = "0123456789ABCDEF";

        for (int i = 0; i < nums.length-1; i+=2) {
           // Use String.charAt() for getting Hex token
           System.out.print(nums[i]+"" + syms.charAt(nums[i+1]));
           if (i < nums.length-2) {
               // decide when to print ending colon.
               System.out.print(":");
           }
        }
int[]nums={13,13,12,12,4,4,4};
字符串syms=“0123456789ABCDEF”;
对于(int i=0;i
13,13变成13c正是我试图告诉您一个字节需要两个十六进制数字的原因。如果是c13呢?你怎么知道?@ElliotFrisch永远不会是c13。第一个值应以十进制显示,第二个值应以十六进制显示。以下是我将RLE数据转换为人类可读的表示形式的具体说明。对于每次运行,应按顺序以十进制(1-2位)显示运行长度;十六进制的运行值(1位);和一个分隔符“:”,在运行之间。Ex:(新字节[]{15,15,6,4})生成字符串“15f:64”。@ElliotFrish如果我能够不显示输出字符串中的最后一个字符,或者完全从上一次迭代中删除:则可以解决我的问题。但我理解这是因为我是如何处理的,不确定这是否是家庭作业,但你熟悉循环吗?@WJS这是我为学校做的一个更大的编码项目的一部分。一般来说,我对循环和java非常陌生。我在这里做的是嵌套for循环吗?我的输出是我的预期输出,除了最后的输出:我试图通过提供建议来帮助这个人。你真的认为我,特别是埃利奥特·弗里希
// no colons here!
if( pracArray[i+1] == 0) {System.out.print("0");}
if( pracArray[i+1] == 1) {System.out.print("1");}
if( pracArray[i+1] == 2) {System.out.print("2");}
if( pracArray[i+1] == 3) {System.out.print("3");}
if( pracArray[i+1] == 4) {System.out.print("4");}
if( pracArray[i+1] == 5) {System.out.print("5");}
if( pracArray[i+1] == 6) {System.out.print("6");}
if( pracArray[i+1] == 7) {System.out.print("7");}
if( pracArray[i+1] == 8) {System.out.print("8");}
if( pracArray[i+1] == 9) {System.out.print("9");}
if( pracArray[i+1] == 10) {System.out.print("a");}
if( pracArray[i+1] == 11) {System.out.print("b");}
if( pracArray[i+1] == 12) {System.out.print("c");}
if( pracArray[i+1] == 13) {System.out.print("d");}
if( pracArray[i+1] == 14) {System.out.print("e");}
if( pracArray[i+1] == 15) {System.out.print("f");}

// if last iteration of loop, print colon
if (i + 1 != pracArray.length - 1) {
    System.out.print(":");
}
for ( int i = 0; i < pracArray.length; i+=2)
{
    // for the elements at even indices, you just print them out directly, no need for conversion or anything
    // so all your if statements are unnecessary
    System.out.print(pracArray[i]);

    // then it's the odd indices. If it's less than 10, handle them the same way
    if (pracArray[i + 1] < 10) {
        System.out.print(pracArray[i + 1]);
    } else {
        // but if it's >= 10, convert it to hex.
        System.out.print((char)('a' + pracArray[i + 1] - 10));
    }
    if (i + 1 != pracArray.length - 1) {
        System.out.print(":");
    }
}
        int[] nums= {13,13,12,12,4,4,4,4};
        String syms = "0123456789ABCDEF";

        for (int i = 0; i < nums.length-1; i+=2) {
           // Use String.charAt() for getting Hex token
           System.out.print(nums[i]+"" + syms.charAt(nums[i+1]));
           if (i < nums.length-2) {
               // decide when to print ending colon.
               System.out.print(":");
           }
        }