Foros del Web » Programación para mayores de 30 ;) » Java »

Contar carácteres

Estas en el tema de Contar carácteres en el foro de Java en Foros del Web. Hola, Quiero saber cuantas letras contiene un determinado String donde salen carácteres raros (acentos, ñ, etc). Usando micadena.length() obtengo el número de carácteres de la ...
  #1 (permalink)  
Antiguo 24/02/2011, 09:05
 
Fecha de Ingreso: febrero-2011
Mensajes: 10
Antigüedad: 13 años, 2 meses
Puntos: 0
Contar carácteres

Hola,

Quiero saber cuantas letras contiene un determinado String donde salen carácteres raros (acentos, ñ, etc).

Usando micadena.length() obtengo el número de carácteres de la cadena, el problema es que si hay carácteres raros salen más

Por ejemplo:

"é" tiene solo un carácter (para mi). Sin embargo, la función length() devolvería 2 por la codificación.

Alguien sabe como evitar este error?

Muchas gracias por vuestras respuestas,

G.T.

PD: Por si os pica la curiosidad estoy haciendo una aplicación web con JSP y trabajo con bases de dato Postgres.
  #2 (permalink)  
Antiguo 24/02/2011, 12:28
Avatar de sivadmp  
Fecha de Ingreso: febrero-2011
Ubicación: La Paz - Bolivia
Mensajes: 293
Antigüedad: 13 años, 2 meses
Puntos: 20
Respuesta: Contar carácteres

hola, para calcular la longitud de una cadena ya sea con caracteres especiales o sin ellos
se utiliza el length(). puede que este mal la codificacion de tu archivo, por que no te fijas el tipo de codificacion

String str="é";
System.out.println("LENG "+str.length());
  #3 (permalink)  
Antiguo 25/02/2011, 04:15
 
Fecha de Ingreso: febrero-2011
Mensajes: 10
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Contar carácteres

Cita:
Iniciado por sivadmp Ver Mensaje
hola, para calcular la longitud de una cadena ya sea con caracteres especiales o sin ellos
se utiliza el length(). puede que este mal la codificacion de tu archivo, por que no te fijas el tipo de codificacion

String str="é";
System.out.println("LENG "+str.length());
Hola,

Lo que tu me dices me devuelve 1.

El problema, es que si se trata del dato que obtengo del campo me da 2.

Los JSP están UTF-8 y la Base de datos también.
  #4 (permalink)  
Antiguo 25/02/2011, 05:06
 
Fecha de Ingreso: febrero-2011
Mensajes: 10
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Contar carácteres

Cita:
Iniciado por sivadmp Ver Mensaje
hola, para calcular la longitud de una cadena ya sea con caracteres especiales o sin ellos
se utiliza el length(). puede que este mal la codificacion de tu archivo, por que no te fijas el tipo de codificacion

String str="é";
System.out.println("LENG "+str.length());

Al final tu comentario sobre la codificación me ha puesto sobre la buena vía y he podido encontrar la solución solito:

Código:
public Integer contaCaracters (String s) {
        try {
            byte[] auxiliar = s.getBytes();
            String aux = new String (auxiliar, "utf-8");
            System.out.println("la largada codificada  :" + aux.length() + "el string  :" + aux);
            return aux.length();
        } catch (UnsupportedEncodingException ex) {
            ex.printStackTrace();
            Logger.getLogger(NouArxiuAction.class.getName()).log(Level.SEVERE, null, ex);
        }
        return 0;
    }
  #5 (permalink)  
Antiguo 25/02/2011, 11:48
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: Contar carácteres

Cita:
Lo que tu me dices me devuelve 1.

El problema, es que si se trata del dato que obtengo del campo me da 2.
Tú problema es que no estás leyendo correctamente la cadena de entrada, ya que al ser UTF-8 y leerla como ISO, te convierte los caracteres tipo ñ,é,ï en algo parecido a ú,Ã?... De hecho tu método sirve para saber cuantas letras tenía la cadena original, pero no para leerla correctamente.

Si estás usando tomcat y recogiendo los campos de la web mediante GET, llega con que añadas

Código XML:
Ver original
  1. URIEncoding="UTF-8" en el Conector presente en server.xml o en context.xml

http://confluence.atlassian.com/disp...s+URI+encoding

Vamos, que lo has resuelto, pero complicándolo innecesariamente.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: acentos, caracteres, contar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:42.