String index out of range: -1怎么处理啊

楼歪 2014-07-15 04:31:47
public void parseRequestInfo(){
if(null==requestInfo||(requestInfo=requestInfo.trim()).equals("")){
return ;
}
/*
* 从信息的首行分解出:请求方法,路径,参数)(get可能存在)
* eg:GET /index.html?uname=123&pwd=123 HTTP/1.1
* 如果为post,请求参数可能在正文最后
*
*/
String paramString="";//接收请求参数
//1.获取请求方式
String firstLine=requestInfo.substring(0,requestInfo.indexOf(CRLF));//**********************************报错行
int idx=requestInfo.indexOf("/");

this.method=firstLine.substring(0,idx).trim();
String urlStr=firstLine.substring(idx,firstLine.indexOf("HTTP/")).trim();
if(this.method.equalsIgnoreCase("post")){
this.url=urlStr;
paramString=requestInfo.substring(requestInfo.lastIndexOf(CRLF)).trim();
}else if(this.method.equalsIgnoreCase("get")){
if(urlStr.contains("?")){
String[] urlArray=urlStr.split("\\?");
this.url=urlArray[0];
paramString=urlArray[1];//接收请求参数
}else{
this.url=urlStr;
}
}
//不存在请求参数
if(paramString.equals("")){
return;
}
//2.将请求参数封装到map中
parseParames(paramString);
}
public void parseParames(String parseString){
//分割,将请求字符串转成数组
StringTokenizer token=new StringTokenizer(parseString,"&");
while(token.hasMoreTokens()){
String keyValue=token.nextToken();//循环Returns the next token from this string tokenizer.


String[] keyValues=keyValue.split("=");
if(keyValues.length==1){//
keyValues=Arrays.copyOf(keyValues, 2);
keyValues[1]=null;//代表空,赋值给“=”后面部分
}
String key=keyValues[0].trim();
String value=(null==keyValues[1]?null:decode(keyValues[1].trim(),"gbk"));
//转换成map,分拣
if(!parameterMapValue.containsKey(key)){
parameterMapValue.put( key, new ArrayList<String>());

}
List<String > values=parameterMapValue.get(key);
values.add(value);

}
}
报错的行我用“***************”标出来了,不知道怎么改,求救!
...全文
83717 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
楼歪 2014-07-15
  • 打赏
  • 举报
回复
妈蛋,输出来是GET /log?uname=dqpi&pwd=12345 HTTP/1.1,正确的该是GET /index.html?uname=dqpi&pwd=12345 HTTP/1.1
ChongQingJin28 2014-07-15
  • 打赏
  • 举报
回复
抱歉 我忘了 按 F5 了 如有雷同 真属巧合
ChongQingJin28 2014-07-15
  • 打赏
  • 举报
回复
回复一楼 "abcd".indexOf("e") 应该会返回 -1 和长度好像没有关系 firstline 不一定含有 \n ,应该加个 if indexOf(\n) == -1 then firstline = 。。。
rumlee 2014-07-15
  • 打赏
  • 举报
回复
requestInfo.indexOf(CRLF) 应该是这个返回-1了吧,那你要加个if判断以下,如果requestInfo中不存在CRLF则怎么处理。
tony4geek 2014-07-15
  • 打赏
  • 举报
回复
这个调试下, range 了。
小灯光环 2014-07-15
  • 打赏
  • 举报
回复
数组下标越界 requestInfo.indexOf(CRLF)打印一下看看是多少~长度肯定超过requestInfo了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧