RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 813721
Accepted
Oleg Khegay
Oleg Khegay
Asked:2020-04-13 18:09:28 +0000 UTC2020-04-13 18:09:28 +0000 UTC 2020-04-13 18:09:28 +0000 UTC

如何计算文本文件中大写和小写字母的数量?

  • 772

我知道如何从字符串中做到这一点。用计数器很简单。

for (int k = 0; k < input.length(); k++) {
    if (Character.isUpperCase(input.charAt(k))) upperCase++;
    if (Character.isLowerCase(input.charAt(k))) lowerCase++;
}    
System.out.printf("Всего %d заглавных букв и %d прописных.",upperCase,lowerCase);

但是如何将它应用到文件中呢?通过 FileInputStream 上传文件后,如何从头到尾循环并应用它?对不起“菜鸟”的问题。

java
  • 4 4 个回答
  • 10 Views

4 个回答

  • Voted
  1. ezhov_da
    2020-04-13T18:34:45Z2020-04-13T18:34:45Z

    没有什么能阻止您利用您的知识稍微更改代码:

        import java.io.ByteArrayInputStream;
        import java.io.InputStream;
        import java.util.Scanner;
    
        public class FileTest {
            public static void main(String[] args) {
                String file = "Например это текст из файла\nахахахаха";
                count(new ByteArrayInputStream(file.getBytes()));
    
                //ВАШ вариант с файлом
        //        try {
        //            count(new FileInputStream(new File("ВАШ ФАЙЛ")));
        //        } catch (FileNotFoundException e) {
        //            e.printStackTrace();
        //        }
            }
    
            private static void count(InputStream inputStream) {
                int upperCase = 0;
                int lowerCase = 0;
    
                try (Scanner scanner = new Scanner(inputStream, "UTF-8");) {
                    while (scanner.hasNextLine()) {
                        String line = scanner.nextLine();
                        for (int k = 0; k < line.length(); k++) {
                            if (Character.isUpperCase(line.charAt(k))) upperCase++;
                            if (Character.isLowerCase(line.charAt(k))) lowerCase++;
                        }
                    }
                }
                System.out.printf("Всего %d заглавных букв и %d прописных.\n", upperCase, lowerCase);
            }
        }
    
    • 3
  2. Best Answer
    iksuy
    2020-04-13T18:47:44Z2020-04-13T18:47:44Z

    使用例如BufferedReader

    FileReader fr = new FileReader("file.txt");
    BufferedReader br = new BufferedReader(fr);
    String s;
    while((s = br.readLine()) != null){
        //ваш уже готовый подсчет для одной строки
    }
    br.close();
    

    或者更多,但更漂亮:

    FileReader fr = new FileReader("file.txt");
    BufferedReader br = new BufferedReader(fr);
    br.lines()
        .map(Letters::stringToLettersCount)
        .reduce(Letters::sum)
        .ifPresent(l -> System.out.println(l.toString()));
    br.close();
    

    public class Letters {
        private int lower;
        private int upper;
        public void incLower(){
            lower++;
        }
        public void incUpper(){
            upper++;
        }
        public int getLower() {
            return lower;
        }
        public int getUpper() {
            return upper;
        }
        public Letters add(Letters letters){
            this.upper += letters.getUpper();
            this.lower += letters.getLower();
            return this;
        }
        public static Letters sum(Letters l1, Letters l2){
            Letters l = new Letters();
            l.add(l1);
            l.add(l2);
            return l;
        }
        public static Letters stringToLettersCount(String s){
            Letters l = new Letters();
            for (char c : s.toCharArray()) {
                if (Character.isUpperCase(c)) l.incUpper();
                else if (Character.isLowerCase(c)) l.incLower();
            }
            return l;
        }
    
        @Override
        public String toString() {
            return "UpperCase: " + upper + ", LowerCase: " + lower; 
        }
    }
    
    • 3
  3. Peter Samokhin
    2020-04-13T18:54:25Z2020-04-13T18:54:25Z

    使用最少的代码并且没有包装器。只有从文件中读取文本行的逻辑已添加到您的代码中。

    int lower = 0, upper = 0;
    
    try {
        for (String line : Files.readAllLines(Path path = Paths.get("file.txt");)) {
            for (int k = 0; k < line.length(); k++) {
                if (Character.isUpperCase(line.charAt(k))) {
                    upper++;
                } else {
                    lower++;
                }
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    System.out.println("Lower: " + lower + ", upper: " + upper);
    
    • 2
  4. Sergey Gornostaev
    2020-04-13T21:35:56Z2020-04-13T21:35:56Z
    Map<Boolean, Long> map = Files.lines(Paths.get("file.txt"))
                                  .map(String::chars)
                                  .flatMap(is -> is.mapToObj(c -> (char) c))
                                  .collect(
                                    Collectors.groupingBy(
                                      Character::isUpperCase,
                                      Collectors.counting()));
    
    System.out.printf("Всего %d заглавных букв и %d прописных.",
                      map.getOrDefault(true, 0),
                      map.getOrDefault(false, 0));
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5