Tengo dos clases:

public class SwimmingWorkout implements Workout {

    @Override
    public String getWorkout() {
        File fr = new File("swimmingWorkout_beginner.txt");

        Scanner sc = null;
        try {
            sc = new Scanner(fr);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        String val = "";
        while (sc.hasNextLine()) {
            val = val + sc.nextLine();
        }

        sc.close();
        return val;
    }
}

Y:

public class MainApp {

    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        Workout workout = context.getBean("myWorkout", Workout.class);
        System.out.println(workout.getWorkout());
        context.close();
    }

}

Después de ejecutar, tengo todas las líneas del archivo impresas en una línea. Lo que quiero hacer es devolver el valor val con cada línea impresa en una nueva línea, no en una. ¿Cómo puedo hacer esto?

0
Gregory 13 ene. 2018 a las 16:36

3 respuestas

La mejor respuesta

Cuando obtiene una línea del escáner, el delimitador se elimina. En este caso, el delimitador es la nueva línea. Así que tienes que volver a agregarlo. Una forma de volver a agregarlo es esto:

val = val + sc.nextLine() + "\n";

También hay otras formas. Por ejemplo, puede usar un StringBuilder o StringJoiner. Pero el que pegué aquí es rápido de probar.

1
Jose Martinez 13 ene. 2018 a las 13:48

La mejor solución es probablemente almacenar todos sus valores en una ArrayList (los nombraré valores en este ejemplo) y luego en un bucle for imprimirlo todo línea por línea:

// This line will go outside of your method in SwimmingWorkout near top
ArrayList<Integer> values=new ArrayList<Integer>();

// this will go at the bottom of your SwimmingWorkout method just before you return the value
values.add(val);

Cuando la aplicación se carga por primera vez en su clase separada, escriba:

for (int i = 0; i < values.size(); i++){
System.out.println(values.get(i));
}

Estas líneas imprimirán cada valor línea por línea de manera eficiente.

1
Andy Lebowitz 13 ene. 2018 a las 15:23

Puede insertar la cadena de la línea de corte al final de cada línea que obtuvo

De

val = val + sc.nextLine();

Para

val = val + sc.nextLine() + "\n";

" \ n " significa nueva línea

O

Puede imprimir cada vez que tenga una nueva línea (en caso de que solo desee mostrar todos los datos que obtuvo)

De

System.out.println(workout.getWorkout());

Para

workout.getWorkout();

Y en el método getWorkout ():

De

val = val + sc.nextLine();

Para

System.out.println(sc.nextLine());
1
VietDD 13 ene. 2018 a las 13:54