Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 10
at java.lang.String.charAt(Unknown Source)
at pdfToExcel.FileRead.mobile_number(FileRead.java:15)
at pdfToExcel.FileRead.remove_other(FileRead.java:45)
at pdfToExcel.FileRead.main(FileRead.java:65)
import java.io.*;
public class FileRead {
public static void mobile_number (String line){
int len = line.length();
try{
for(int i=0;i<len;i++){
String res = "88";
if(line.charAt(i)=='0' && line.charAt(i+1)=='1'){
if(line.charAt(i+2)>='5' && line.charAt(i+2)<='9' ){
if((line.charAt(i+10)>='0' && line.charAt(i+10)<='9')){
res+="01"+line.charAt(i+2)+"1";
res+= line.substring(i+3, i+10);
}else if((line.charAt(i+11)>='0' && line.charAt(i+11)<='9')){
res+= line.substring(i, i+11);
}
}else if(line.charAt(i+2)=='1' && line.charAt(i+3)=='9') {
if((line.charAt(i+10)>='0' && line.charAt(i+10)<='9')){
res+="01191";
res+= line.substring(i+4, i+10);
}else if((line.charAt(i+11)>='0' && line.charAt(i+11)<='9')){
res+= line.substring(i, i+11);
}
}
}
if(res.length()>9) System.out.println(res);
}
}finally{
}
}
public static void remove_other(String l){
String str="";
for(int i=0;i<l.length();i++){
if(l.charAt(i)>='0' && l.charAt(i)<='9'){
str+=l.charAt(i);
}
if(str.length()>9) mobile_number(str);
}
}
public static void main(String[] args) throws IOException {
File f=new File("C:\\Users\\User\\Desktop\\abc.txt");
BufferedReader br = new BufferedReader(new FileReader(f));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
if(line.length()>9){
remove_other(line);
}
//System.out.println(line);
//System.out.println(">>>>>>>>>>>>>>> " + line.length());
}
String everything = sb.toString();
} finally {
br.close();
}
}
}
答案 0 :(得分:1)
你使用&#39; i&#39;作为一个迭代计数器,它长大到line.length:
int len = line.length();
for(int i=0;i<len;i++){...}
想象一下当&#39; i&#39;在某一时刻等于line.length -1,它遇到了
这样的指令if(line.charAt(i+10) == '9') {...}
E.g。当line.length = 10时,你会尝试获得它的第19个字符。
答案 1 :(得分:0)
如果我正确读取您的代码和堆栈跟踪,我可以假设使用至少包含10个字符的字符串调用方法mobile_number
。这一行是这样做的:
if(str.length()>9) mobile_number(str);
没有关于弦的最大长度的假设。您尝试访问字符串的单独字符,如
line.charAt(i+11)
但永远不要检查位置(即i+11
)是否指向字符串中的字符。对于某些职位,这可能会有效,但对于其他职位,您将收到上述StringOutOfBoundsException
。