【解决问题.思路篇】StringIndexOutOfBoundsException:String index out of range: -1

本文通过分析StringIndexOutOfBoundsException异常,探讨了由于字符串长度引发的问题。在跟踪代码后,发现在jsp页面中,尝试获取IP时,由于使用了错误的分隔符导致异常。最终解决方案是将访问地址从localhost:8080更改为127.0.0.1:8080,以避免因IP表示过长引发的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

          看到题目,就应该能想到应该是字符串过长引起的问题。下面咱们分析一下。


报错:

严重: Servlet.service()for servlet jsp threw exception
java.lang.StringIndexOutOfBoundsException:String index out of range: -1

         根据代码跟踪,发现是首页数据加载完之后就会报错,所以继续跟踪,发现了问题。

         当我们输入了访问地址:localhost8080页面以及数据加载完就会报错,抛异常。但是不影响运行。后面一步步跟踪代码,终于找到问题的根本所在了。


其中一个jsp页面是这样写的:

//获取IP地址
StringIp=request.getRemoteAddr();
String ip1,ip2,ip3,ip4;
 
int i=Ip.indexOf(".");
ip1=Ip.substring(0,i);
Ip=Ip.substring(i+1,Ip.length());
 
i=Ip.indexOf(".");
ip2=Ip.substring(0,i);
Ip=Ip.substring(i+1,Ip.length());
 
i=Ip.indexOf(".");
ip3=Ip.substring(0,i);
ip4=Ip.substring(i+1,Ip.length());
 
String Ipone=ip1;
StringIptwo=ip1+"."+ip2;

       发现获取Ip获取后的值为0:0:0:0:0:0:0:1。Ip的值太长了,于是把indexOf(".")改为indexOf(":")还报错:0:0:0:1,还是太长了。于是发现这是因为访问地址的路径为localhost8080,修改为127.0.0.1:8080就可以了。

 

总结

          其实很多时候,当我们积累足够的时候,就能根据报错找出大概是什么问题,然后根据问题顺藤摸瓜就能找到问题的所在。解决问题的思路这也是一种经验,多积累。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值