0
votes

Comment imprimer le premier mot d'un fichier séparé par une ligne de tabulation?

J'essaie de lire un fichier et d'imprimer uniquement le premier numéro de chaque ligne. J'ai essayé d'utiliser split, mais il ne renvoie jamais de résultat correct, il imprime simplement le contenu entier comme ci-dessous dans le tableau. Toute aide serait très appréciée

            public static void main(String[] args) {
                
                // Create file
                File file = new File("/Users/lobsang/documents/start.txt");
    
                try {
                    // Create a buffered reader
                    // to read each line from a file.
                    BufferedReader in = new BufferedReader(new FileReader(file));
                    String s;
    
                    // Read each line from the file and echo it to the screen.
                    s = in.readLine();
                    while (s != null) {
                        
                          
                        
                        System.out.println(s.split("\s")[0]);
                    
                        
                        s = in.readLine();
                    }
                    
                    // Close the buffered reader
                    in.close();
    
                } catch (FileNotFoundException e1) {
                    // If this file does not exist
                    System.err.println("File not found: " + file);
    
                } catch (IOException e2) {
                    // Catch any other IO exceptions.
                    e2.printStackTrace();
                }
            }
    
        }

production

258
261
264
267
270

mot de classe publique {

**thats my file** 

 40    3  Trottmann
 43    3  Brubpacher
252    3  Stalder
255    3  Leuch
258    3  Zeller
261    3  Reolon
264    3  Ehrismann
267    3  Wipf
270    3  Widmer 

**expected output** 
 40
 43
258
261
264
267
270


3 commentaires

Le Regex dans votre méthode de split est techniquement correct, mais vous devez échapper à la barre oblique inverse en java. Ainsi, la ligne fixe serait: System.out.println(s.split("\\s")[0]);


Merci, cela a fonctionné .. pouvez-vous s'il vous plaît regarde à nouveau ma sortie .. fait quelques changements .. il sort juste vide pour tous les nombres qui ont un chiffre inférieur à trois. peut-être à cause de l'espace initial au lieu du nombre .. comment puis-je mettre à jour mon expression pour qu'elle affiche tout le nombre, y compris 1 et 2 chiffres numbe r


J'ai ajouté une réponse ci-dessous.


3 Réponses :


1
votes

Vous devez doubler la barre oblique inverse pour que la barre oblique inverse soit lue, alors procédez comme suit:

System.out.println(s.split("\\s")[0]);

au lieu de:

System.out.println(s.split("\s")[0]);


0 commentaires

1
votes

Pour faire correspondre un caractère ayant une signification spéciale dans l'expression régulière, vous devez utiliser un préfixe de séquence d'échappement avec une barre oblique inverse (\). La séquence d'échappement pour les espaces blancs est \s , vous devez donc remplacer "\s" par "\\s"


0 commentaires

0
votes

Comme je l'ai déjà répondu dans les commentaires, vous devez échapper à la barre oblique inverse dans java. De plus, vous pouvez trim() la chaîne avant de la fractionner, ce qui supprime les espaces de début et de fin. Cela signifie qu'il fonctionnera également avec des nombres à deux chiffres ou à un chiffre. Donc, ce que vous devriez utiliser est:

System.out.println(s.trim().split("\\s")[0]);


1 commentaires

si vous pouviez .. pouvez-vous jeter un oeil à mon autre problème: stackoverflow.com/questions/64858171/...