Как посчитать количество алфавита в PDF-файл в Java - PullRequest
0 голосов
/ 23 ноября 2018

В этой программе мне нужно подсчитать количество всех алфавитов (az), а код, приведенный ниже, может рассчитывать только количество «u».Поэтому, если я хочу сосчитать 26 из них, нужно ли записывать оператор 26 if в цикле for?

вывод должен быть: a: 389 b: 777 c: 909 .. ..

Пожалуйста, дайте мне другое решение

            String[] words = sourceCode.split(" ");
            amountOfWords = amountOfWords + words.length;
            for (String word : words) {
                amountOfChars = amountOfChars + word.length();

                for (int i = 0; i < word.length(); i++) {
                    if (word.charAt(i) == 'u' || word.charAt(i) == 'U') {
                        u++;
                    }
                }
            }

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вы можете попробовать это.Я использую библиотеку: fontbox-2.0.12 и pdfbox-2.0.12 и commons-logging-1.2

        try {
            PDDocument doc = PDDocument.load(new File("E:\\project-test\\scloud\\test\\src\\main\\resources\\Shadip_Banik.pdf"));
            String text = new PDFTextStripper().getText(doc);

            sourceCode = text.replace("-", "").replace(".", "");


            String[] words = sourceCode.split(" ");

            amountOfWords = amountOfWords + words.length;
            StringBuilder builder = new StringBuilder();

            for (String word : words) {
                amountOfChars = amountOfChars + word.length();

                Pattern pattern = Pattern.compile("[a-zA-Z]");
                Matcher matcher = pattern.matcher(word);
                //System.out.println("MatchesCount "+matcher.group());
                while (matcher.find()) {
                    builder.append(matcher.group());

                }
            }
            String allData = builder.toString();
            System.out.println(builder.toString());
            int total = 0;
            for (int i=0;i<allAlphabate.length();i++)
            {
                int alphabateCount = 0;
                Pattern pattern = Pattern.compile(Character.toString(allAlphabate.charAt(i)));
                Matcher matcher = pattern.matcher(allData);
                while (matcher.find()) {
                    alphabateCount++;
                }
                total+=alphabateCount;
                System.out.println(allAlphabate.charAt(i) +" : "+alphabateCount);
            }
            if(total == builder.toString().length())
            {
                System.out.println("Yes   -------------------------------------------------");
            }
            System.out.println("Amount of Chars is " + amountOfChars);
            System.out.println("Amount of Words is " + (amountOfWords + 1));
            System.out.println("Average Word Length is " + (amountOfChars / amountOfWords));
        } catch (Exception ert) {

        }

НоЕсли вы хотите рассчитать прописные и строчные буквы вместе, используйте этот код

     for (String word : words) {
                    amountOfChars = amountOfChars + word.length();

                    Pattern pattern = Pattern.compile("[a-zA-Z]");
                    Matcher matcher = pattern.matcher(word.toLowerCase());
                    //System.out.println("MatchesCount "+matcher.group());
                    while (matcher.find()) {
                        builder.append(matcher.group());

                    }
                }
                String allData = builder.toString();
                int total = 0;
                for (int i=0;i<allAlphabate.length();i++)
                {
                    int alphabateCount = 0;
                    Pattern pattern = Pattern.compile(Character.toString(allAlphabate.charAt(i)));
                    Matcher matcher = pattern.matcher(allData.toLowerCase());
                    while (matcher.find()) {
                        alphabateCount++;
                    }
                    total+=alphabateCount;
                    System.out.println(allAlphabate.charAt(i) +" : "+alphabateCount);
                }
                if(total == builder.toString().length())
                {
                    System.out.println("Yes   -------------------------------------------------");
}
0 голосов
/ 23 ноября 2018

попробуйте это:

String str = new PDFTextStripper().getText(doc);    
int len = str.length();
Map<Character, Integer> numOfChars = new HashMap<Character, Integer>(Math.min(len, 26));

for (int i = 0; i < len; ++i)//pre increment
{
    char alphabet = str.charAt(i);    
    if (!numOfChars.containsKey(alphabet ))
    {
        numOfChars.put(alphabet , 1);
    }
    else
    {
        numOfChars.put(alphabet , numOfChars.get(alphabet ) + 1);
    }
}
System.out.println(numOfChars);

Источник

...