get java.lang.StringIndexOutOfBoundsException尝试二进制文本转换时出错

时间:2017-07-23 15:16:57

标签: java string binary

我是java新手。

我想创建程序将二进制流转换为java中的文本。在我的程序中我首先可以给出二进制流的数量作为输入然后我可以给二进制数字。输出我想得到对应于二进制数的文本但是我的程序出错了。我提到错误和程序。谢谢你。

  • 错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 8 at java.lang.String.substring(String.java:1963) at javaapplication32.JavaApplication32.main(JavaApplication32.java:23)

第23行是int m = Integer.parseInt(s.substring(8*k,(k+1)*8),2);

  • 代码:

    import java.util.Scanner;
    
    public class JavaApplication32 {
    
    public static void main(String[] args) {
    // TODO code application logic here
    String s="";
    int j;
    Scanner a=new Scanner(System.in);
    
    int b=a.nextInt();
    String arr[]=new String[b];
    
    for(int i=0;i<b;i++){
        arr[i]=a.next();
    
    }
    for(j=0;j<b;j++){
        for(int k=0;k<arr[j].length()/8;k++){
            int m = Integer.parseInt(s.substring(8*k,(k+1)*8),2);
            s += (char)(m);
        }
        System.out.println(s);
        s="";
            }
         }
    
    }
    
  • 示例:

input:

2 011100000111100101110100011010000110111101101110 0110110001110101011011

output:

python lu

1 个答案:

答案 0 :(得分:1)

在这一行:

String s="";

使用0长度字符串初始化字符串s,并在循环中使用它而不指定它:

for(int k=0;k<arr[j].length()/8;k++){
    int m = Integer.parseInt(s.substring(8*k,(k+1)*8),2); // It crashes here because 's' still have a length of 0, and you ask the substring method to get the substring between indexes 0 and 8
    s += (char)(m);
}

我认为你想做的更像是这样:

for(int k=0;k<arr[j].length()/8;k++){
    int m = Integer.parseInt(arr[j].substring(8*k,(k+1)*8),2); // here, with arr[j], you use your input
    s += (char)(m);
}

有了这个输入:

2
011100000111100101110100011010000110111101101110
0110110001110101011011

输出:

python
lu