我有一个带二进制值的长字符串。我有一个哈希图,其中以二进制数字为键,以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;
}
}
}
答案 0 :(得分:0)
首先,尝试一下调试。这是一个简单的例子。您可以在调试模式下运行(将断点放在String temp = bs.substring(from, to);
行上),也可以在同一行之前打印from
和to
的值。这将有助于了解发生了什么。
解决方案:
如果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;
}
}
}
希望有帮助。