关于异常String out of range:-1及处理方案
2017-05-12 17:11
621 查看
我今天处理日志文件,想从一万多条日志中提取 url 里面的销售 ID;
如:http://cms.yhd.com/sale/IhSwTYNxnzS?tc=ad.0.0.15116-32638141.1&tp=1.1.708.0.3.LEHaQW1中取出 sale/ 后面的字符串IhSwTYNxnzS;
但是在运行 hive UDF 时出现了一个 Error :
String out of indexof range: -1;
我写的代码如下:
return url;
jvm 测试时是可以通过的,但是我在运行 MapReduce 时报了一个RuntimeException ,大概是 String out of indexof range : -1;
我一开始很疑惑为什么会报索引超出范围,我明明写了判断,后来我发现,真的存在了一个很严重的问题,我写的代码不够严谨,如果字符串中没有 "sale/" or '?' 的时候, indexof 值为-1,所以汇报这个out of range 的异常, 于是我重新修改了我的代码。
eg:
结果运行异常消除。
如:http://cms.yhd.com/sale/IhSwTYNxnzS?tc=ad.0.0.15116-32638141.1&tp=1.1.708.0.3.LEHaQW1中取出 sale/ 后面的字符串IhSwTYNxnzS;
但是在运行 hive UDF 时出现了一个 Error :
String out of indexof range: -1;
我写的代码如下:
package com.floyd.myjava;
import org.apache.hadoop.hive.ql.exec.UDF;
public class GetSaleName extends UDF {
public String evaluate(String url) {
if (url != null) {
int index1 = url.indexOf("sale/");
int index2 = url.indexOf('?');
url = url.substring(index1 + 5, index2);
return url;
}
return null;
}
public static void main(String[] args) {
String url = "http://cms.yhd.com/sale/IhSwTYNxnzS?tc=ad.0.0.15116-32638141.1&tp=1.1.708.0.3.LEHaQW1";
GetSaleName gs = new GetSaleName();
System.out.println(gs.evaluate(url));
}
}
jvm 测试时是可以通过的,但是我在运行 MapReduce 时报了一个RuntimeException ,大概是 String out of indexof range : -1;
我一开始很疑惑为什么会报索引超出范围,我明明写了判断,后来我发现,真的存在了一个很严重的问题,我写的代码不够严谨,如果字符串中没有 "sale/" or '?' 的时候, indexof 值为-1,所以汇报这个out of range 的异常, 于是我重新修改了我的代码。
eg:
package com.floyd.myjava;
import org.apache.hadoop.hive.ql.exec.UDF;
public class GetSaleName extends UDF {
public String evaluate(String url) {
if (url != null) {
// 添加一个 if 判断条件
if (url.indexOf("sale/") != -1 && url.indexOf('?') != -1
&& url.indexOf("sale/") < url.indexOf('?')) {
int index1 = url.indexOf("sale/");
int index2 = url.indexOf('?');
url = url.substring(index1 + 5, index2);
return url;
}
}
return null;
}
public static void main(String[] args) {
String url = "http://cms.yhd.com/sale/IhSwTYNxnzS?tc=ad.0.0.15116-32638141.1&tp=1.1.708.0.3.LEHaQW1";
GetSaleName gs = new GetSaleName();
System.out.println(gs.evaluate(url));
}
}
结果运行异常消除。
相关文章推荐
- 关于c# 引发了"system.indexOutofRangeException"类型异常,该怎么处理
- Android 中 java.lang.IllegalArgumentException: pointerIndex out of range 异常的处理方法
- “System.IndexOutOfRangeException”类型的异常在 Stores.dll 中发生,但未在用户代码中进行处理
- eclipse Java文件打开异常解决方法 :java.lang.StringIndexOutOfBoundsException: String index out of range: 26
- ASP.NET中OutOfMemoryException异常的处理方案
- Android 中 java.lang.IllegalArgumentException: pointerIndex out of range 异常的处理方法
- 对std::out_of_range抛出异常进行处理
- 关于ibatis的parameter index out of range (1 > number parameters which is 0).异常
- 关于String index out of range: -1报错问题
- 【转】ASP.NET中OutOfMemoryException异常的处理方案
- 页面报出uncaught exception: out of memory异常,如何处理
- ASP.NET异常具体信息: System.IndexOutOfRangeException: 索引 0 不是为负数,就是大于行数。
- Mabatis错误提示Parameter index out of range的处理方法
- Json解析异常处理方式(JSONException: Value of type java.lang.String cannot be converted to JSONObject)
- 关于java.lang.outofmemoryerror的报错处理
- 由String index out of range: -1引发的思考
- Android studio:报错String index out of range: -1
- String index out of range: -1
- mvn install:java.lang.StringIndexOutOfBoundsException: String index out of range: -1问题的解决
- 从数据库中读取信息时抛出异常java.sql.SQLException: Parameter index out of range (1 > number of parameter