關於異常String out of range:-1及處理方案
阿新 • • 發佈:2019-02-05
我今天處理日誌檔案,想從一萬多條日誌中提取 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;
我寫的程式碼如下:
但是在執行 hive UDF 時出現了一個 Error : String out of indexof range: -1;
我寫的程式碼如下:
package com.floyd.myjava;
import org.apache.hadoop.hive.ql.exec.UDF;
publicclassGetSaleNameextends UDF {
publicString evaluate
if(url !=null){
int index1 = url.indexOf("sale/");
int index2 = url.indexOf('?');
url = url.substring(index1 +5, index2);
- return url;
}
returnnull;
}
publicstaticvoid 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
System.out.println(gs.evaluate(url));
}
}
package
import org.apache.hadoop.hive.ql.exec.UDF;
publicclassGetSaleNameextends UDF {
publicString 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;
}
}
returnnull;
}
publicstaticvoid 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 =newGetSaleName();
System.out.println(gs.evaluate(url));
}
}