Formatar campo cpf cnpj no iReport

Estou tendo um problema com o ireport, tenho um campo que pode ou ser cpf ou ser cnpj(11 ou 11 digitos).
Já usei a seguinte formula no Field Expression:
( $F{cpfcnpj}.length() == 14 ? ($F{cpfcnpj}.substring(0, 2) + “.” + $F{cpfcnpj}.substring(2, 5) + “.” + $F{cpfcnpj}.substring(5, 8) + “/” + $F{cpfcnpj}.substring(8, 12) + “-” + $F{cpfcnpj}.substring(12, 14)) : ($F{cpfcnpj}.substring(0, 3) + “.” + $F{cpfcnpj}.substring(3, 6) + “.” + $F{cpfcnpj}.substring(6, 9) + “-” + $F{cpfcnpj}.substring(9, 11)) )

Porém, só está funcionando quando todos registros vem como CPF ou se todos vem como CNPJ. Se alguns vem como cpf e outros como cnpj ele não funciona.

pq vc n faz isso via sql? utilizando substring.

vc pode fazer o seguinte… vc pode verificar a quantidade de caracteres caso seja 11 é cpf caso ao contrário cnpj.

Ola,

Você pode usar essa expressão que vai funcionar:

$P{parameter1}.length() == 11 ? 
java.util.regex.Pattern.compile("(\\d{3})(\\d{3})(\\d{3})(\\d{2})").matcher($P{parameter1}).replaceAll("\$1.\$2.\$3-\$4") : 
java.util.regex.Pattern.compile("(\\d{2})(\\d{3})(\\d{3})(\\d{4})(\\d{2})").matcher($P{parameter1}).replaceAll("\$1.\$2.\$3.\$4/\$5")

Funcionou para o meu caso. obrigado