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.

BufferedReader: Objeto que lee texto de un flujo de entrada de caracteres y almacena cada línea en la memoria. String array: Arreglo de cadenas de texto. 2D int array: Arreglo bidimensional de enteros.

Tengo un archivo .txt que contiene texto que me gustaría guardar en una cadena, parte en una matriz de cadenas y luego la última parte en una matriz bidimensional de enteros, y me enfrento a dos problemas:

  1. ¿Cómo leer y guardar las dos matrices cuando su tamaño no se conoce de antemano?
  2. La matriz bidimensional no se lee/guarda correctamente.

Aquí está el archivo de texto de referencia:

Esta es la oración que se va a leer.
Esto
es
una
matriz
de cadenas.
90 47 110 95 95
101 87
54 0 38 12

Aquí está parte de mi método que se supone que debe leer y guardar los tres tipos de datos:

BufferedReader br = new BufferedReader(new FileReader(fileName));

sentence = br.readLine();

stringArr = new String[5]; // ¿cómo inicializar sin un número fijo de elementos?
for(int i = 0; i<stringarr.length; i++){="" stringarr[i]="br.readLine();" }="" int2darr="new" int[3][5];="" ¿cómo="" inicializar="" con="" cualquier="" cantidad="" de="" filas="" y="" columnas?="" for(int="" i="0;"></stringarr.length;><int2darr.length; i++){="" for(int="" j="0;"></int2darr.length;><int2darr[i].length; j++){
        int2darr[i][j] = br.read();
        // ¿cómo leer el espacio después de cada entero?
    }
}

¿cómo puedo obtener el tamaño de las matrices leyendo el archivo de texto, para que cuando inicialice ambas matrices, tenga los tamaños correctos? ¡cualquier ayuda sería muy apreciada! j++){=”” int2darr[i][j]=”br.read();” ¿cómo=”” leer=”” el=”” espacio=”” después=”” de=”” cada=”” entero?=”” }=”” }=”” ="" ¿cómo="" puedo="" obtener="" el="" tamaño="" de="" las="" matrices="" leyendo="" el="" archivo="" de="" texto,="" para="" que="" cuando="" inicialice="" ambas="" matrices,="" tenga="" los="" tamaños="" correctos?="" ¡cualquier="" ayuda="" sería="" muy=""></int2darr[i].length; j++){
int2darr[i][j] = br.read();
// ¿cómo leer el espacio después de cada entero?
}
}

¿cómo puedo obtener el tamaño de las matrices leyendo el archivo de texto, para que cuando inicialice ambas matrices, tenga los tamaños correctos? ¡cualquier ayuda sería muy apreciada!>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución

    Para leer y guardar ambas matrices cuando su tamaño no se conoce de antemano, puedes usar un ArrayList para leer cada línea del archivo y luego convertirla en una matriz. Para la matriz 2D, puedes usar ArrayLists anidados para almacenar los valores de cada fila y luego convertirlos en una matriz 2D.

    Aquí te muestro cómo puedes modificar tu código:

    BufferedReader br = new BufferedReader(new FileReader(fileName));
    
    // Leer la oración
    sentence = br.readLine();
    
    // Leer el arreglo de strings
    List<string> stringList = new ArrayList<>();
    String line;
    while ((line = br.readLine()) != null && !line.isEmpty()) {
        stringList.add(line);
    }
    stringArr = stringList.toArray(new String[0]);
    
    // Leer la matriz 2D
    List<><integer>> int2DList = new ArrayList<>();
    while ((line = br.readLine()) != null) {
        List<integer> intList = new ArrayList<>();
        String[] tokens = line.split(" ");
        for (String token : tokens) {
            intList.add(Integer.parseInt(token));
        }
        int2DList.add(intList);
    }
    int2DArr = new int[int2DList.size()][];
    for (int i = 0; i < int2DList.size(); i++) {
        List<integer> rowList = int2DList.get(i);
        int[] rowArray = new int[rowList.size()];
        for (int j = 0; j < rowList.size(); j++) {
            rowArray[j] = rowList.get(j);
        }
        int2DArr[i] = rowArray;
    }
    

    En este código, leemos cada línea del archivo usando readLine() y lo agregamos a un ArrayList para el arreglo de strings y ArrayLists anidados para la matriz 2D. Usamos split() para dividir la línea en tokens y convertirlos en enteros antes de agregarlos a la lista de filas. Finalmente, convertimos cada lista de filas en una matriz y la almacenamos en la matriz 2D. Ten en cuenta que podemos usar el método size() del ArrayList para determinar el tamaño de cada matriz.

    Para la matriz 2D, usamos un int[][] en lugar de un ArrayList<><integer>> para almacenar los datos con fines de eficiencia.

    ¡Espero que esto te sea de ayuda!

Comments are closed.