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 Réponses :
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]);
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"
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]);
si vous pouviez .. pouvez-vous jeter un oeil à mon autre problème: stackoverflow.com/questions/64858171/...
Le Regex dans votre méthode de
splitest 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.