Ayuda con el Método SPLIT() de java

Respuesta de
a
Usuario
El problema esta en que me lo separa por caracteres y no por el separador que le doy
package LE;
import java.io.*;
public class LE {
    /**
     * @param args
     */
    public static void main(String[] args) {
        /**
         * Leemos de fichero
         */
        String sFichero = "f1.txt";
        File fichero = new File(sFichero);
        String[] pilotos=new String[24];
        String[][] datos=new String[24][22];
        try {
            FileReader fr = new FileReader("f1.txt");
            BufferedReader bf = new BufferedReader(fr);
            String sCadena;
            int i=0;
            while ((sCadena = bf.readLine()) != null) {
                pilotos=sCadena;
                System.out.println(pilotos=sCadena);
                i++;
            }
        } catch (FileNotFoundException fnfe) {
            fnfe.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        //for(int j=0;j<24;j++)
            //for(int k=0;k<22;k++)
            String[]  ij = pilotos[0].split("|");
        
        for(int j=0;j<24;j++){
            //for(int k=0;k<22;k++)
                System.out.print(ij[j]);
            System.out.print("\n");
        }
        
        /**
         * Escribimos de fichero
         */
        /*if (fichero.exists())
            System.out.println("El fichero " + sFichero + " ya existe");
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter(sFichero));
            // Escribimos 10 filas
            for (int x = 0; x < 10; x++)
                bw.write("Fila numero " + x + "\n");
            // Hay que cerrar el fichero
            bw.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }*/
    }
}

Fernando Alonso|fernandoalonso|25|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|25//
Felipe Massa|felipemassa|18|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|18//
Lewis Hamilton|lewishamilton|15|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|15//
Sebastian Vettel|sebastianvettel|12|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|12//
Nico Rosberg|nicorosberg|10|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|10//
Michael Schumacher|michaelschumacher|8|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|8//
Jenson Button|jensonbutton|6|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|6//
Mark Webber|markwebber|4|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|4//
Vitantonio Liuzzi|vitantonioliuzzi|2|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|2//
Rubens Barrichello|rubensbarrichello|1|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1//
Nico Hulkenberg|nicohulkenberg|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Vitaly Petrov|vitalypetrov|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Robert Kubica|robertkubica|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Adrian Sutil|adriansutil|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Jaime Alguersuari|jaimealguersuari|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Sebastien Buemi|sebastienbuemi|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Jarno Trulli|jarnotrulli|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Heikki Kovalainen|heikkikovalainen|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Karun Chandhok|karunchandhok|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Bruno Senna|brunosenna|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Pedro De la Rosa|pedrodelarosa|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Kamui Kobayashi|kamuikobayashi|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Timo Glock|timoglock|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
Lucas Di Grassi|lucasdigrassi|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0//
F
e
r
n
a
n
d
o
 
A
l
o
n
s
o
|
f
e
r
n
a
n
d
Experto
Creo que estas podrian ser unas modificaciones del codigo
package LE; 
import java.io.*; 
public class LE { 
    public static void main(String[] args) { 
        String sFichero = "f1.txt"; 
        File fichero = new File(sFichero); 
        String[] pilotos=new String[24]; 
        String[][] datos=new String[24][22]; 
        try { 
            FileReader fr = new FileReader("f1.txt"); 
            BufferedReader bf = new BufferedReader(fr); 
            String sCadena; 
            int i=0; 
            while ((bf.readLine()) != null) { 
                pilotos=sCadena; 
                System.out.println(sCadena); 
                i++; 
            } 
        } catch (FileNotFoundException fnfe) { 
            fnfe.printStackTrace(); 
        } catch (IOException ioe) { 
            ioe.printStackTrace(); 
        } 
        

       for(int j=0;j<24;j++) {
           String[]  ij = pilotos.split("\\"); 
         
        for(int j1=0;j1<ij.lengt();j1++){ 
            //for(int k=0;k<22;k++) 
                System.out.print(ij[j]); 
            System.out.print("\n"); 
        } 

       }
         
        /** 
         * Escribimos de fichero 
         */ 
        /*if (fichero.exists()) 
            System.out.println("El fichero " + sFichero + " ya existe"); 
        try { 
            BufferedWriter bw = new BufferedWriter(new FileWriter(sFichero)); 
            // Escribimos 10 filas 
            for (int x = 0; x < 10; x++) 
                bw.write("Fila numero " + x + "\n"); 
            // Hay que cerrar el fichero 
            bw.close(); 
        } catch (IOException ioe) { 
            ioe.printStackTrace(); 
        }*/ 
    } 
}

La idea principal esta bien tu problema creo que es el carácter que mandas a separar ya que para separar por \ tienes que establecer ya que la primera solo indica una secuencia de escape \\ y lo segundo es que ij no va a medir 24 si no que va a medir lo que separe la función split y este se modifica por cada ciclo por lo cual tienes que mandar a imprimir eso de una vez, espero que sirva ya que no lo he probado pero cualquier duda solo dímela y ya la probare para enviarte algo más seguro.
Usuario
Es que no es \, es el pipe o barra vertical (la del "1") --> |
Experto
mmmmm si pues si tienes razón pero no probaste con ese código que puse, pero ahorita si ya tengo donde probar lo voy a probar y te cuento, pero yo pienso que con el código que te puse tendría que jalar.
Usuario
No, no funciona...
Solo imprime el valor al que inicializas la variable sCadena
Experto
Buenas que tal ya le di solución a tu problema lo único es que deje de usar la función split y use la clase StringTokenaizer espero te dejen usar esa clase y aquí esta el código.
public class Main{
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        String sFichero = "C:\\Users\\Alfredo\\Desktop\\prueba.txt";
        File fichero = new File(sFichero);
        String[] pilotos=new String[24];  
        String[][] datos=new String[24][22];
        try {
            FileReader fr = new FileReader(fichero);
            BufferedReader bf = new BufferedReader(fr);
            String sCadena;
            int i=0;
            while ((sCadena = bf.readLine()) != null) {
                pilotos=sCadena;
                //System.out.println(sCadena);
                i++;
            }
        } catch (FileNotFoundException fnfe) {
            fnfe.printStackTrace();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        for (int i = 0; i < pilotos.length; i++) {
            StringTokenizer tokens = new StringTokenizer(pilotos,"|");
            while(tokens.hasMoreTokens()){
            System.out.print(tokens.nextToken());
            }
            System.out.println();
        }
              
        
        /**
         * Escribimos de fichero
         */
        /*if (fichero.exists())
            System.out.println("El fichero " + sFichero + " ya existe");
        try {
            BufferedWriter bw = new BufferedWriter(new FileWriter(sFichero));
            // Escribimos 10 filas
            for (int x = 0; x < 10; x++)
                bw.write("Fila numero " + x + "\n");
            // Hay que cerrar el fichero
            bw.close();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }*/
    }
}
Esto es todo espero te sirva
Usuario
Muchas gracias! Pero... una pregunta, buscaba que funcionara y funciona... ya por curiosidad... ¿por qué con el split no funciona y con el tokenizer si? ¿No se supone que el split es el sucesor del tokenizer(que es un método deprecado ya)?
Muchas gracias enserio, =)
Es que estoy empezando como programador, después de finalizar la carrera, e intento adaptarme
Gracias
Experto
Pues no, ya que el método split digamos que es una forma fácil de hacerlo, pero el stringtokenizer es utilizado por algunos programadores para hacer análisis léxicos ya que esto te permite la oportunidad de hacer comparaciones con las palabras y poder obtener componentes léxicos llamado tokens y pudiera ser que dentro de las declaraciones del método split el | este utilizado como otra secuencia y no exclusivamente como ese símbolo.
Y cualquier cosa ya lo sabes puedes preguntar.