Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

127
Visualizações
La cadena de BufferedReader no es igual a la cadena literal

Hay muchas publicaciones de personas que usan == en lugar de iguales, pero esta no es una de ellas.

Estoy leyendo una lista de códigos de un archivo CSV asegurándome de que sean iguales a un literal de cadena.

Fila de ejemplo de CSV:

ingrese la descripción de la imagen aquí

Después de leer cada código, recorto y llamo a toUpper() antes de colocarlos dentro de un mapa.

 private final Map<String, Code> codeMap = new HashMap<>(); private void loadFile() { BufferedReader reader = null; try { reader = new BufferedReader(new FileReader("src/main/resources/codes.csv")); String line = null; while ((line = reader.readLine()) != null) { String[] details = line.split(","); codeMap.put(details[0].trim().toUpperCase(), new Code(details[0].trim(), details[1].trim(), details[2].trim())); } } catch (IOException e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } }

También tengo un método para recuperar un código basado en la cadena pasada:

 public Tool getCodeByString(String code){ return codeMap.get(code.toUpperCase()); }

Después de llenar el mapa, llamo a getCodeByString usando "CHNS" y se devuelve nulo. Miré en el mapa y vi la clave "CHNS" pero se devuelve nulo. Inmediatamente puedo decir que las matrices de bytes son diferentes.

Literal de cadena:

ingrese la descripción de la imagen aquí

Clave en el mapa:

ingrese la descripción de la imagen aquí

¿Alguien sabe cómo puedo arreglar esto y hacer que el valor del archivo sea igual al literal?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Parece que está leyendo un archivo UTF-8, con un carácter BOM redundante \uFEFF (bytes -2, -1).

Por lo tanto, debe descartar la lista de materiales y leer el archivo como UTF-8 (para cualquier carácter especial). Sin embargo, como FileReader lee el archivo en la codificación de plataforma predeterminada, use otra lectura.

También está leyendo de un archivo de recursos. Esto se empaquetará en la aplicación (¿jar?), por lo que no debe leerlo como un File de disco.

Files.lines usa por defecto UTF-8.

 private void loadFile() { Path path = Paths.get(getClass().getResource("/codes.csv").toURI()); try (Stream<String> lines = Files.lines(path)) { lines.forEach(line -> { String[] details = line.split("\\s*,\\s*", 3); String key = details[0].replace("\uFEFF", ""); // Replace of BOM would only be needed at the file begin. codeMap.put(key.toUpperCase(), new Code(key, details[1], details[2])); }); } catch (IOException e) { e.printStackTrace(); } // Automatic close of lines. }

La expresión regular de las franjas split los espacios en blanco antes y después de la coma. También limitó la división a 3 valores, por lo que el último campo puede contener comas como texto.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda