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

获取java.lang.StringIndexOutOfBoundsException尝试二进制到文本转换时出错,java,string,binary,Java,String,Binary,我是java新手 我想创建一个程序,用java将二进制流转换成文本。在我的程序中,首先我可以给出二进制流的数量作为输入,然后我可以给出二进制数。作为输出,我想得到对应于二进制数的文本。但我的程序中有错误。下面我提到了错误和程序。谢谢 错误: 线程“main”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:8 位于java.lang.String.substring(String.java:1963) 在javaapplicati

我是java新手

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

  • 错误:
线程“main”java.lang.StringIndexOutOfBoundsException中的异常:字符串索引超出范围:8 位于java.lang.String.substring(String.java:1963) 在javaapplication32.javaapplication32.main(javaapplication32.java:23)

第23行是
intm=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="";
            }
         }
    
    }
    
    import java.util.Scanner;
    公共类JavaApplication32{
    公共静态void main(字符串[]args){
    //此处的TODO代码应用程序逻辑
    字符串s=“”;
    int j;
    扫描仪a=新的扫描仪(System.in);
    int b=a.nextInt();
    字符串arr[]=新字符串[b];
    对于(int i=0;i在这一行:

    String s=”“;
    
    使用0长度字符串初始化字符串
    s
    ,并在循环中使用它,而不分配它:


    for(int k=0;k的可能副本尝试用自己的话解释代码应该如何工作。循环中的条件基于
    arr[j]
    ,但您正在“切割”
    s
    中的部分也应该存储您的结果。@Tom我尽了最大的努力。我是编程新手。我无法理解这一点。但感谢您的努力。@Pshemo当您看到我的示例时,您将了解我的程序。我是编程新手。请帮助我解决这个问题。让我重新表述我的建议。想象您正在向某人解释您的程序e(这称为)。通过这种方式,您可以注意到您想要做的事情,但可以看到代码的某些部分实际上并没有按照您的要求进行操作。目前,我能给您的最佳建议是使用全名重命名变量以描述其用途。例如,不要使用
    s
    而使用
    resultString
    。这将允许您看到您的代码正在执行ng
    resultString.substring(8*k,(k+1)*8)
    ,但是否确实要从结果中选取新数据?