Java cadena muy larga comparar no parece funcionar

temporada de Borg:

Actualización:
El uso de sus sugerencias en la comprobación entre las cuerdas, descubrí que la diferencia está en la disposición de algunos campos ya que estas cadenas son realmente cadenas JSON.

Ejemplo:
el campo username: [email protected]de cadena1 se encuentra al principio, pero se encuentra en un punto intermedio en cadena2. Me pregunto si hay una manera de verificar o comparar objetos JSON 2 independientemente de la disposición de sus campos / propiedades ... siempre y cuando su contenido (valores de campo) son los mismos.

Lo que he intentado:

private boolean sameJsonObject(Object o1, Object o2) throws IOException {
    if (o1 == null || o2 == null) {
        return false;
    }

    JsonNode json1 = mapper.readTree(mapper.writeValueAsString(o1));
    JsonNode json2 = mapper.readTree(mapper.writeValueAsString(o2));

    return json1.equals(json2);
}

esto funciona, pero estoy seguro de que esto puede ser mejorado.

Problema Original:
Me gustaría comprobar si dos cadenas son iguales, pero estas cadenas son muy larga que no se puede fijar a un objeto variable / cuerda y obtendría constante de cadena demasiado tiempo.

Sé que hay equals(), equalsIgnoreCase()y StringUtils.equals(s1, s2)pero ninguna de ellas parece que funciona.

Las cadenas que estoy comparando provenían de dos fuentes diferentes y comparándolo obtener manualmente los mismos resultados (me refiero a los contenidos son los mismos).

Traté de colocar las cuerdas de muestra aquí, pero no puedo. El tamaño de cada cuerda para comparar es más de 30k (170k cada cadena).

Por cierto, estas cadenas son datos reales (JSON) y son realmente enorme y me quieren poner a prueba su igualdad (contenido).

¿Hay una manera de hacer la comprobación en Java?

¡Gracias!

GhostCat saludos Monica C.:

La respuesta simple es: compara el carbón dos cadenas de carbón.

En otras palabras: lo más probable, el built-in de Java métodos de comparación de cadenas son correctas, lo que lleva a: sus cadenas de entrada no son iguales. Es muy poco probable que la igualdad de cuerdas dan lugar a equals()dar falso.

Así, la primera opción razonable es: cambiar el código de comparación de modo que:

  • reitera la primera cadena, char por Char
  • Obtiene la Char correspondiente de la segunda cadena de
  • compara esos (ya sean iguales "completo", o caso ignorando)
  • en caso de problemas: imprimir el índice y los dos caracteres diferentes (en el que se asegura a imprimir algo así como "<" + thatChar + ">"sólo para asegurarse de que los caracteres no imprimibles, o tal vez usando Character.getNumericValue ())

Por lo tanto, la respuesta aquí es, básicamente, para permitir que usted mismo para realizar la depuración adecuada.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=223033&siteId=1
Recomendado
Clasificación