¿Como puedo guardar los numeros de un bloc de notas en un array en java?, para despues ordenar esos numeros.
Para recuperar los datos obtenidos y guardarlos en un array, podemos trabajar con el método split(String regex)
, el cual define un separador y recibe como parámetro una expresión regular y nos retorna String[]
String[] numsStr = s1.split("\\n");
Y para hacer la ordenación tenemos el método sobrecargado java.util.Arrays.sort(numeros)
, el cual nos hace una ordenación de una forma ascendente
También en tu método leerTxt()
cambia el salto de línea que tienes así: temp = temp + "\n" + bfRead;
, por esta manera temp += bfRead+"\n";
, para que te añada antes la cadena y después le añades el salto de línea, no antes como estabas haciendo, sino tendrás problemas a la hora de hacer la conversión de Strings a ints
String[] numsStr = s1.split("\\n");
int[] numeros = new int[numsStr.length];
for (int i = 0; i < numsStr.length; i++) {
numeros[i] = Integer.parseInt(numsStr[i]);
}
Ejemplo:
public class PrincipalCore {
public static void main(String[] args) {
//leer un TXT
Core c = new Core();
String s1 = c.leerTxt("C:\\Users\\miusuario\\Desktop\\numeros.txt");
System.out.println(s1 + "");
String[] numsStr = s1.split("\\n");
int[] numeros = new int[numsStr.length];
for (int i = 0; i < numsStr.length; i++) {
//if(!numsStr[i].trim().equals(""))
numeros[i] = Integer.parseInt(numsStr[i]);
}
//imprimimos numeros sin ordenar y tal cual los tenemos en nuestro array
for (int numero : numeros) {
System.out.print(numero + " ");
}
System.out.println("");
//ordenamos
java.util.Arrays.sort(numeros);
for (int numero : numeros) {
System.out.print(numero + " ");
}
}
}
class Core {
public String leerTxt(String direccion) {
String texto = "";
try (BufferedReader bf = new BufferedReader(new FileReader(direccion))) {
//StringBuilder temp = new StringBuilder();
String temp = "";
String bfRead;
while((bfRead = bf.readLine()) != null){
//haz el ciclo, mientras bfRead tiene datos
//temp.append(bfRead).append("\n");
temp += bfRead+"\n"; //guardado el texto del archivo
}
texto = temp.toString();
} catch (FileNotFoundException ex) {
System.out.println("No se encontró el archivo");
} catch (IOException ex) {
System.out.println("Excepcion " + ex.getMessage());
}
return texto;
}
}
Resultado:
Actualización..
El método readLine()
en el while
, lo que hará será devolvernos un String del contenido leído de una línea o nulo 'null' si se ha alcanzado el final de la secuencia.
Entendido esto, y sabiendo que en el fichero de texto la información que tenemos son números, podríamos recoger el contenido de cada línea, osea un número y añadirlo a una Lista 'List' de tipo Integer, como bien han comentado.
public List leerTxt2(String direccion) {
List<Integer> listNums = new ArrayList<>();
try (BufferedReader bf = new BufferedReader(new FileReader(direccion))) {
String bfRead;
while((bfRead = bf.readLine()) != null){
listNums.add(Integer.parseInt(bfRead));
}
} catch (FileNotFoundException ex) {
System.out.println("No se encontró el archivo");
} catch (IOException ex) {
System.out.println("Excepcion " + ex.getMessage());
}
return listNums;
}
Y ahora en el main..
//Obtenemos nuestra lista
List<Integer> lNums = c.leerTxt2("C:/Users/miusuario/Desktop/numeros.txt");
System.out.println("\nImprimimos tal cual están en la lista");
for (Integer num : lNums) {
System.out.print(num+ " ");
}
//Ordenamos
Collections.sort(lNums);
System.out.println("\nAhora los tenemos ordenados");
for (Integer num : lNums) {
System.out.print(num+ " ");
}
Resultado: