java.lang.StringIndexOutOfBoundsException读取二进制字符串

时间:2018-11-12 16:16:00

标签: java string exception

我有一个带二进制值的长字符串。我有一个哈希图,其中以二进制数字为键,以char为值。我有一个函数,应该使用2个指针读取二进制字符串,并与hashmap进行比较,并将相应的char存储在main.decodedTxt中。但是,即时通讯为此超出限制的字符串。我不知道该怎么解决。我在“ String temp =”行上遇到异常。我有控制台输出的图片链接,以查看更好的图片。

 public static void bitStringToText (String binText){
    String bs = binText;
    int from =0;
    int to = 1;

    while(bs != null){
        String temp = bs.substring(from, to);
        if (main.newMapDecoding.containsKey(temp)){
        main.decodedTxt += main.newMapDecoding.get(temp);
        from =to;
        to = from +1;
        } else {
            to = to + 1;
        }
    }
}

Image of console exception is here

2 个答案:

答案 0 :(得分:0)

首先,尝试一下调试。这是一个简单的例子。您可以在调试模式下运行(将断点放在String temp = bs.substring(from, to);行上),也可以在同一行之前打印fromto的值。这将有助于了解发生了什么。


解决方案:

如果bs不为null,则将始终具有StringIndexOutOfBoundsException。因为您没有检查to是否指向bs字符串不存在的索引。第一个最简单的示例是空字符串:bs == ""

解决方案之一可能是在while (to <= bs.length())期间替换条件。

答案 1 :(得分:0)

首先,无需检查bs是否为null,因为代码的任何部分都不会更改bs的值。您当前的代码有时会越过binText的可能索引。最好只循环binText并检查是否在其中找到内容。毕竟,无论如何,您都必须遍历完整的字符串。如下更改代码

public static void bitStringToText (String binText){

//no need to do this if you are not modifying the contents of binText
//String bs = binText; 

int from =0;
int to = 1;
int size = binText.length();
String temp = "";

while(to <= size ){
    temp = binText.substring(from, to);
    if (main.newMapDecoding.containsKey(temp)){
    main.decodedTxt += main.newMapDecoding.get(temp);
    from =to;
    to = from +1;
    } else {
        to = to + 1;
    }
  }
}

希望有帮助。