java.lang.StringIndexOutOfBoundsException: begin 3, end 6, length 4

Olá amigos

estou com um prolema no substring apresenta este erro:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/rh] threw exception [Request processing failed; nested exception is net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: $F{matricula}.substring(0,3)+’.’+$F{matricula}.substring(3,6)+’-’+$F{matricula}.substring(6)] with root cause
java.lang.StringIndexOutOfBoundsException: begin 3, end 6, length 4

No ireport funciona normalmente mas quando executo o relatório pela aplicação dá erro.

Alguém poderia ajudar?

Muito obrigado

Sua String só possui 4 caracteres mas você está tentando fazer um substring das posições 3 à 6.

Olá staroski

minha string tem 7 posições 1432321 preciso exibir no relatório assim: 143.232-1

No ireport mostra normalmente mas quando eu executo pela aplicação java da erro:

Muito obrigado

Não é com o valor 1432321 que está acontecendo a exceção, é algum outro.

Exibe em algum lugar o valor do $F{matricula} para descobrir qual é o conteúdo que está errado.

Olá staroski

no banco de dados está armazenado 1432321 para matriculas acima de 100000 mil mas as matriculas abaixo disso estão assim 0002826 com zeros a esquerda, quando eu executo o relatório pela aplicação é suprimido os zeros a esquerda por isso acontece o erro de tamanho do string.

Muito obrigado

Bloco de Citação

1 curtida

Olá amigos

consegui fazendo assim:

$F{matricula}.length() == 7?
$F{matricula}.substring(0,3)+’.’+$F{matricula}.substring(3,6)+’-’+$F{matricula}.substring(6):
$F{matricula}.length() == 6?
‘0’+$F{matricula}.substring(0,2)+’.’+$F{matricula}.substring(2,5)+’-’+$F{matricula}.substring(5):
$F{matricula}.length() == 5?
‘00’+$F{matricula}.substring(0,1)+’.’+$F{matricula}.substring(1,4)+’-’+$F{matricula}.substring(4):
$F{matricula}.length() == 4?
‘000’+$F{matricula}.substring(0,3)+’-’+$F{matricula}.substring(3):
$F{matricula}

Como eu uso o parâmetro $P!{PAR_SQL} para passar a query abaixo:

i	query.append("select ");
	query.append("fc.matricula, ");
	query.append("fc.nome, ");
	query.append("fc.dataadmissao, ");
	query.append("fc.datapublicacao, ");
	query.append("cg.descricao as cargo, ");
	query.append("og.item as orgaoitem, ");
	query.append("og.descricao as orgao, ");
	query.append("fn.descricao as funcao, ");
	query.append("nv.descricao as nivel ");
	query.append("from funcionarios fc " );
	query.append("inner join cargos cg on cg.id=fc.idcargo ");
	query.append("inner join orgaos og on og.id=fc.idorgao ");
	query.append("inner join funcoes fn on fn.id=fc.idfuncao ");
	query.append("inner join niveis nv on nv.id=fc.idnivel ");
	query.append("where fc.excluido=false ");
	query.append("order by og.item, fc.nome");

o resultado do campo matricula que vem do BD eh varchar com tamanho 10 mas a matricula soh tem no máximo 7 dígitos

Muito obrigado