es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

“Utilizando patrones/delimitadores para obtener una cadena de texto desde un escáner”

Tengo un archivo .txt que tiene información ordenada como
campo de información; campo de información; campo de información; campo de información y así sucesivamente. Todos los campos son Strings.

¿Cómo puedo crear un método que obtenga el siguiente campo de información?

Más información:

Exporté el archivo .txt desde Microsoft Access con “;” como delimitador. Si mi Scanner se llama sc, ¿cómo puedo hacer un método tipo sc.nextField()? Lo que hice originalmente fue tener un bucle mientras recorría cada palabra con sc.next() y agregaba la palabra a un String hasta que encuentre un “;”, pero ese método ignoraba mis nuevas líneas dentro de los campos.

private static String grabField(Scanner sc) {

      String wordInFloat;
      String wordsToPass = "";

      while (true) {
          wordInFloat = sc.next();
          if (wordInFloat.endsWith(";"))
              break;
          else
              wordsToPass += wordInFloat + " ";
      }
      return wordsToPass;
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear un método que obtenga el siguiente campo de información, puede modificar su método existente para usar el delimitador “& quot;; & quot;” en lugar de espacios en blanco. Aquí hay una implementación de ejemplo:

    private static String getNextField(Scanner sc) {
        sc.useDelimiter(";\\s*");
        return sc.next();
    }
    

    El método useDelimiter establece el delimitador para el escáner en ; seguido de cualquier cantidad de espacios en blanco. Esto le permite capturar correctamente los campos con nuevas líneas dentro de ellos. El método next devuelve el siguiente token, que en este caso es el siguiente campo de información.

    Puede llamar a este método en un bucle para iterar sobre todos los campos en el archivo. Aquí hay un ejemplo:

    Scanner sc = new Scanner(new File("data.txt"));
    while (sc.hasNext()) {
        String field = getNextField(sc);
        // Hacer algo con el campo
    }
    sc.close();
    

    En este ejemplo, el método hasNext verifica si hay más campos para leer. Si es así, se llama al método getNextField para recuperar el siguiente campo. Luego puede procesar el campo como desee. Una vez que no haya más campos, el escáner se cierra con el método close.

Comments are closed.