Erro em Manipulação de Strings

3 respostas
P

Pessoal,
Gostaria de saber se o trecho de código abaixo está correto, porque está me dando a mensagem de erro: Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 15
at java.lang.String.charAt(Unknown Source)

String s = rs2.getString("ATRIBUTO");
			
			SwingHandler.getInstance().displayMessage("Entrou aqui!"+s);
			
			int tam = s.length();
								
			for (int i=1;i<=tam;i++)
			{
				//String j = Integer.toString(i);
				String carac[] = new String [tam];
			
				if (i == 1)
				{
					if ((s.charAt(i) == 'a') || (s.charAt(i) == 'e') || (s.charAt(i) == 'i') || (s.charAt(i) == 'o') || (s.charAt(i) == 'u') || (s.charAt(i) == 'y'))
					{
						carac[i-1] = "V";
						
					}	
					else 
					{
						carac[i-1] = "C";
						
					}
				}
				
				else 
				{
					if ((s.charAt(i) == 'a') || (s.charAt(i) == 'e') || (s.charAt(i) == 'i') || (s.charAt(i) == 'o') || (s.charAt(i) == 'u') || (s.charAt(i) == 'y') || (s.charAt(i) == 'h') || (s.charAt(i) == s.charAt(i+1)) )
					{
						carac[i-1] = "";
						
					}
					else if (i == tam && s.charAt(i) == 's')
					{
						//s.charAt(i)= '';
						carac[i-1] = "";						
					}
					else 
					{
						String database1 = "CODIGOFONETICO";
					
						try 
						{
							dbHandler.selectDatabase(database1);
						} 
						catch (DatabaseException e) 
						{
							throw new KDDMethodException("Unable to select database",e);
						}
					
						ResultSet rs3;
						String query3 = "SELECT CODIGO FROM CODIGOFONETICO WHERE CARACTER = '"+s.charAt(i)+"';";
						try 
						{
							rs3 = dbHandler.queryDatabase(query3);
							carac[i-1] = rs3.toString();
							
					
						} 
						catch (SQLException e) 
						{
							throw new KDDMethodException("Unable to query database",e);
						}
					}
				}
			
				codaux = codaux + carac [i-1];
				
				cod = codaux;
				
								
			}	//for varrendo a string
		
			j++;

Muito obrigada

3 Respostas

R
int tam = s.length();

for (int i=1;i<=tam;i++)
{
//String j = Integer.toString(i);
String carac[] = new String [tam];

Se o tamanho de uma string for 10, então ela irá de 0 à 9. Em seu for você deverá utilizar i de 0 até i < tam.

P

Coloquei o for indo de 0 a tam, mas continuou não funcionando. Pelo que entendi o problema deve estar nos ifs, principalmente nesse:

if ((s.charAt(i) == ‘a’) || (s.charAt(i) == ‘e’) || (s.charAt(i) == ‘i’) || (s.charAt(i) == ‘o’) || (s.charAt(i) == ‘u’) || (s.charAt(i) == ‘y’) || (s.charAt(i) == ‘h’) || (s.charAt(i) == s.charAt(i+1)) )

Se alguém souber o que pode ser, agradeceria muito.

P

Descobri o motivo do erro. É porque quando dava para fazer essa verificação (s.charAt(i) == s.charAt(i+1), quando o i era igual a tam e criei a String como tam, extrapolava a String. Agora está funcionando.

Muito obrigada a todos.

Criado 23 de outubro de 2007
Ultima resposta 23 de out. de 2007
Respostas 3
Participantes 2