2017-09-23 20 views
-3

J'ai besoin de manipuler ce code pour qu'il lise le nombre de chiffres d'un fichier. Je suis honnêtement perplexe sur celui-ci pour une raison quelconque. Ai-je besoin de le marquer en premier? Merci!Manipuler ce code pour qu'il compte le nombre de chiffres dans un fichier

import java.io.*; 
import java.util.*; 

public class CountLetters { 

    public static void main(String args[]) { 
     if (args.length != 1) { 
      System.err.println("Synopsis: Java CountLetters inputFileName"); 
      System.exit(1); 
     } 
     String line = null; 
     int numCount = 0; 
     try { 
      FileReader f = new FileReader(args[0]); 
      BufferedReader in = new BufferedReader(f); 
      while ((line = in.readLine()) != null) { 
       for (int k = 0; k < line.length(); ++k) 
        if (line.charAt(k) >= 0 && line.charAt(k) <= 9) 
         ++numCount; 
      } 
      in.close(); 
      f.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     System.out.println(numCount + " numbers in this file."); 
    } // main 
} // CountNumbers 
+2

Vous devriez [vous assurer que votre code est indenté correctement] (https://stackoverflow.com/posts/46385103/edit) si vous demandez aux gens d'essayer de le lire. – khelwood

+0

Bienvenue dans Stack Overflow. Qu'avez-vous déjà essayé de faire cela? Veuillez consulter [Comment poser une bonne question] (https://stackoverflow.com/help/how-to-ask). Stack Overflow n'est pas un service de codage. Vous êtes censé *** étudier votre problème et faire une bonne tentative pour écrire le code vous-même *** avant de poster. Si vous êtes bloqué sur quelque chose de * spécifique *, revenez en arrière et incluez un [exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve) et un résumé de ce que vous avez essayé, afin que nous puissions vous aider. – FluffyKitten

+0

quel est votre fichier d'entrée? – tommybee

Répondre

2

Utilisez '' pour indiquer une char constante (vous comparez char s à int s), aussi je vous suggère d'utiliser try-with-resources Statement pour éviter explicites appels proches et s'il vous plaît éviter d'utiliser une des boucles de ligne sans accolades (sauf si vous êtes en utilisant des lambdas). Comme

public static void main(String args[]) { 
    if (args.length != 1) { 
     System.err.println("Synopsis: Java CountLetters inputFileName"); 
     System.exit(1); 
    } 
    String line = null; 
    int numCount = 0; 
    try (BufferedReader in = new BufferedReader(new FileReader(args[0]))) { 
     while ((line = in.readLine()) != null) { 
      for (int k = 0; k < line.length(); ++k) { 
       if ((line.charAt(k) >= '0' && line.charAt(k) <= '9')) { 
        ++numCount; 
       } 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    System.out.println(numCount + " numbers in this file."); 
} // main 

En outre, vous pouvez utiliser une expression régulière pour éliminer tous les non-chiffres (\\D) et ajouter la longueur du résultat String (ce qui est tout chiffres). Comme,

while ((line = in.readLine()) != null) { 
    numCount += line.replaceAll("\\D", "").length(); 
} 
1

Utilisez if(Charachter.isDigit(char)) remplacer le caractère à chaque char, ce comptera chaque numéro, et je crois que les chiffres arabes ainsi.