操纵此代码,使其计算文件中的数字位数

时间:2017-09-23 23:14:14

标签: java file digits

我需要操作此代码,以便它将读取文件中的数字位数。 老实说,出于某种原因,我真的很难过。我需要先将其标记化吗? 谢谢!

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 个答案:

答案 0 :(得分:2)

使用''表示char常量(您将charint s进行比较),我建议您使用try-with-resources Statement来避免显式关闭调用,请避免使用没有大括号的一行循环(除非你使用lambdas)。像

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

此外,您可以使用正则表达式删除所有非数字(\\D)并添加结果String的长度(全数字) 。像,

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

答案 1 :(得分:1)

使用if(Charachter.isDigit(char))将char替换为每个字符,这将计算每个数字,我也相信阿拉伯数字。