java.lang.StringIndexOutOfBoundsException:

11 respostas
S
Boa galera aqui por que quando executo este codigo:
import java.io.*;
public class ReadFile {
public static void main (String[] args) {
	File file = new File("c:\\pabx03.txt");
	
	try{
		
		BufferedReader in = new BufferedReader(new FileReader(file));
		String s;
		
		s = in.readLine();
		while (s !=null){
			//System.out.println(s);
			
			System.out.println(s.substring(0,8));
			
			s = in.readLine();
		}
		in.close();
	}catch (FileNotFoundException e1){
		System.err.println("Arquivo não encontrado:"  + file);
		
	}catch(IOException e2){
		e2.printStackTrace();
	}
}
}

recebo este erro:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 8
at java.lang.String.substring(Unknown Source)
at ReadFile.main(ReadFile.java:15)

+ quando mudo a saida para System.out.println(s);
não recebo nenhum erro ...

Boa galera

Abraços

11 Respostas

brunoccouto

E aew?? Blz?
A exce tah dizendo que o problema é no metodo ‘substring’. verifica se a string ‘s’ tem 9 caracteres mesmo… lembre-se que 0 a 8 são 9 caracteres… blz??? tenta colocar de 0 a 7… acho que vai dar certo! Blz???

furutani

A sua string s não tem tamanho maior ou igual a 8, por isso dá esse erro.
Tente com um tamanho menor por exemplo:

System.out.println(s.substring(0,5));
S

tentei de (0,1 a 0,10 ) todos deram o mesmo erro

digaum

Cara… quando vc imprime só com System.out.println(s); o que aparece!?

Muito estranho vc afirmar que do intervalo 0,1 continua dando erro… O que justifica isso seria uma String de um só tamanho.
Exemplo: A, a, B, b etc…

Sacou!?

S
todo o meu arquivo txt:
04/11/08 12:13PM 1 E1245  T10114 27762688                 00:00'45

04/11/08 12:13PM 1 E1148  T10107 22908401                 00:00'19

04/11/08 12:13PM 1 E1102  T10102 25905483                 00:00'57              

04/11/08 12:13PM 1 E1077  T20903 0251633353298            00:00'23              

04/11/08 12:13PM 1 E1019  T10503 <I>2300             0'00 00:01'50            TR

04/11/08 12:13PM 1 E1040  T10906 34641353                 00:01'17              

04/11/08 12:13PM 1 E1242  T10101 37117174                 00:00'20              

04/11/08 12:13PM 1 E1147  T10127 32742314                 00:04'34              

04/11/08 12:13PM 1 E1234  T10903 37698093                 00:02'33              

04/11/08 12:13PM 1 E1256  T10113 27714551                 00:00'49              

04/11/08 12:13PM 1 E1204  T10120 39053518                 00:00'00              

04/11/08 12:13PM 1 E1038  T10927 <I>3795             0'01 00:00'46              

04/11/08 12:13PM 1 E1266  T10106 37675096                 00:00'07              

04/11/08 12:13PM 1 E1034  T10128 26687300                 00:00'40              

04/11/08 12:13PM 1 E1331  T30109 0259132746247            00:00'20              

04/11/08 12:13PM 1 E1001  T10919 <I>3767                                      RC

04/11/08 12:13PM 1 E1244  T30111 0258134421487            00:01'00              

04/11/08 12:13PM 1 E1243  T10105 27788099                 00:00'04              

04/11/08 12:13PM 1 E1144  T20909 0251121310005            00:00'21              

04/11/08 12:13PM 1 E1022  T10928 <I>3787             0'00 00:00'58              

04/11/08 12:13PM 1 E1107  T10503 <I>2300             0'00 00:00'20            TR

********************************************************************************

Date     Time    T Ext    CO     Dial Number         Ring Duration Acct code  CC

********************************************************************************

04/11/08 12:13PM 1 E1324  T31204 86322414                 00:02'20              

04/11/08 12:13PM 1 E1030  T10124 27998523                 00:01'35              

04/11/08 12:13PM 1 E1078  T11203 0319691296940            00:00'16              

04/11/08 12:13PM 1 E1148  T11207 98135103                 00:00'07              

04/11/08 12:13PM 1 F1406  T10924 <I>3790                                      RC

04/11/08 12:13PM 1 E1001  T10919 <I>3767             0'11                     AN

04/11/08 12:13PM 1 E1099  T10924 <I>3790             0'01                     AN

04/11/08 12:13PM 1 E1249  T10122 27144620                 00:00'34              

04/11/08 12:13PM 1 E1028  T10123 25120800                 00:00'10              

04/11/08 12:14PM 1 E1165  T10114 37658071                 00:00'27              

04/11/08 12:14PM 1 E1128  T10902 027222                   00:00'03              

04/11/08 12:14PM 1 E1019  T31201 0312281436415            00:00'05              

04/11/08 12:14PM 1 F1487  T30108 <I>3535                                      RC

04/11/08 12:14PM 1 E1001  T10919 <I>3767             0'11 00:00'10              

04/11/08 12:14PM 1 E1072  T11208 0313491520201            00:00'08              

04/11/08 12:14PM 1 E1257  T30108 <I>3535             0'03                     AN

04/11/08 12:14PM 1 E1260  T10104 24437374                 00:00'46              

04/11/08 12:14PM 1 E1256  T31202 87385530                 00:00'09              

04/11/08 12:14PM 1 E1243  T10120 26924938                 00:00'04              

04/11/08 12:13PM 1 E1266  T10105 30457566                 00:00'00              

04/11/08 12:14PM 1 E1127  T10118 34269321                 00:01'12              

********************************************************************************

Date     Time    T Ext    CO     Dial Number         Ring Duration Acct code  CC

********************************************************************************

04/11/08 12:14PM 1 E1160  T31204 98396723                 00:00'11              

04/11/08 12:14PM 1 E1070  T20912 0254834417777            00:00'27              

04/11/08 12:14PM 1 E1331  T30109 0258332550597            00:00'02              

04/11/08 12:14PM 1 E1062  T10115 0314130171031            00:00'17              

04/11/08 12:14PM 1 E1144  T11207 0311182847401            00:00'06              

04/11/08 12:14PM 1 E1264  T11201 92015889                 00:01'09              

04/11/08 12:14PM 1 E1242  T10127 27853274                 00:00'24              

04/11/08 12:14PM 1 E1099  T10924 <I>3790             0'01 00:00'23              

04/11/08 12:14PM 1 E1078  T30110 0259337352267            00:00'02              

04/11/08 12:14PM 1 E1025  T11203 97290295                 00:00'11              

04/11/08 12:14PM 1 E1245  T10102 22652335                 00:00'31              

04/11/08 12:14PM 1 E1332  T10117 34644030                 00:00'45              

04/11/08 12:14PM 1 E1028  T11208 88831116                 00:00'04              

04/11/08 12:14PM 1 E1101  T11204 96251214                 00:01'01              

04/11/08 12:14PM 1 E1247  T10110 31025021                 00:00'45              

04/11/08 12:14PM 1 E1019  T31204 0312281436415            00:00'08              

04/11/08 12:14PM 1 E1131  T10501 <I>2300                                      RC

04/11/08 12:14PM 1 E1131  T10501 <I>2300             0'01                     AN

04/11/08 12:14PM 1 E1072  T11201 [telefone removido]              00:00'02              

04/11/08 12:14PM 1 E1314  T20901 02511990626671           00:00'16              

04/11/08 12:14PM 1 E1279  T10901 24366243                 00:00'01              

********************************************************************************

Date     Time    T Ext    CO     Dial Number
Andre_Brito

É algum erro no seu arquivo. Não que seja erro, mas por exemplo, se existe uma cadeia com com menos de 8 caracteres, não pega, entende?

Saca só a entrada que eu fiz aqui:

O código

import java.io.*;
public class ReadFile {
public static void main (String[] args) {
	File file = new File("C:\\teste.txt");
	
	try{
		
		BufferedReader in = new BufferedReader(new FileReader(file));
		String s;
		
		s = in.readLine();
		while (s !=null){
			//System.out.println(s);
			
			System.out.println(s.substring(0, 2));
			
			s = in.readLine();
		}
		in.close();
	}catch (FileNotFoundException e1){
		System.err.println("Arquivo não encontrado:"  + file);
		
	}catch(IOException e2){
		e2.printStackTrace();
	}
}
}

A saída:

Eu aposto que é alguma cadeia que seja menor que 8 caracteres e que você tá pegando. Se eu fizer, no lugar dele

System.out.println(s.substring(0, 2));
System.out.println(s.substring(0, 5));

Tenho a exception porque as strings não são maiores que 4. Se você tem strings de tamanhos variados, verifique o tamanho e mande um novo valor para o segundo parâmetro da substring.

editado
Você tem essas quebras de linha no seu txt? Se tiver, tire.
Com espaços funciona tranquilo.

S

então como ja descrevi, tentei com todos os valores minimo e maximo … e todos tenho o mesmo erro

digaum

Mas é claro… Nosso amigo dedejava solucionou…

O seu continua dando erro pois vc em linhas em brancos… experimente tirá-las.

brunoccouto

Ou entao, se não quiser modificar o seu arquivo, coloca no código alguma verificação, pra não pegar substring quando a linha estiver em branco!

Seria uma boa alternativa...
import java.io.*;  
public class ReadFile {  
public static void main (String[] args) {  
    File file = new File("c:\\pabx03.txt");
      
     try{  
          
        BufferedReader in = new BufferedReader(new FileReader(file));  
        String s;  
          
        s = in.readLine();  
        while (s !=null){  
            //System.out.println(s);

            if(!s.equals("")){              
                System.out.println(s.substring(0, 8));  
            }
  
            s = in.readLine();  
        }  
        in.close();  
    }catch (FileNotFoundException e1){  
        System.err.println("Arquivo não encontrado:"  + file);  
          
    }catch(IOException e2){  
        e2.printStackTrace();  
   }  
   }  
}

Sacou??? Flw....

victorwss
Ao invés de

System.out.println(s.substring(0, 8));

coloque

System.out.println(s.length() > 8 ? s.substring(0, 8) : s);

Pronto!

S

Boa amigo victorwss
funcionou obrigado

abraços

Criado 27 de abril de 2008
Ultima resposta 28 de abr. de 2008
Respostas 11
Participantes 6