Как вывести количество заглавных букв в строке — Java

Итак, у меня есть эта программа, которую мне нужно написать. Я должен получить входную строку от пользователя, а затем распечатать, сколько заглавных букв и сколько строчных букв в строке. Я просмотрел всю книгу, которая у меня есть, и я просто не могу найти ничего о том, как печатать прописные и строчные буквы. Я тоже много гуглил и ничего полезного не нашел.

Во всяком случае, вот мой код:

import java.util.Scanner; //calls out the method to get input from user

public class Verk1 {
    public static void main(String args[])
    {
        Scanner innslattur = new Scanner(System.in); //input gotten from user

        System.out.println("Sláðu inn textabrot í há- og lágstöfum.");
        System.out.println("Forritið mun þá segja þér hve margir stafir eru af hverri gerð.");
        System.out.println("Textabrot: ");

//The printouts before tell the user to enter in a string, the program will then print out //how many upper- and lowercase letters there are.

        String strengur = innslattur.nextLine();

        String hastafir = "";

        for (int i=0; i<hastafir.length();i++);
        {
            System.out.println("Í textabrotinu eru " + hastafir + " hástafir");
        }


    }
}

Я знаю, что код неисправен/не работает, но кто-нибудь из вас знает, как мне получить количество прописных и строчных букв, чтобы распечатать их?

Заранее спасибо! Ваше здоровье


person Birgir    schedule 11.03.2014    source источник
comment
Проверьте программу Java, чтобы проверить, является ли символ прописным: vowel" title="java-программа для проверки, является ли символ прописной строчной гласной"> stackoverflow.com/questions/8962025/   -  person VonSchnauzer    schedule 11.03.2014
comment
Перебирайте символы, используя String.charAt(i) и затем используйте Character.isUpperCase(char c) для подсчета. Считайте нижний регистр таким же образом в том же цикле, обязательно учитывайте пробелы и небуквенные символы.   -  person turbo    schedule 11.03.2014


Ответы (5)


Я не проверял это, но я хотел бы сделать что-то подобное.

String text = "This IS My TEXT StrinG";
int upperCaseCounter = 0;
int lowerCaseCounter = 0;
for (int i=0; i<text.length(); i++)
   {
   if (Character.isUpperCase(text.charAt(i)))
      {
       upperCaseCounter++;
      }
   else if(Character.isLowerCase(text.charAt(i)))
     {
       lowerCaseCounter++;
     }
 }

System.out.println("Total Uppercase Characters: " + upperCaseCounter);
System.out.println("Total Lowercase Characters: " + lowerCaseCounter);
person tino    schedule 11.03.2014
comment
Ваше здоровье! Это сработало, но есть один недостаток. Когда он выводит количество строчных букв, он выводит все буквы, включая пробелы. Знаю, почему? - person Birgir; 11.03.2014
comment
Рад, что это работает для вас! Что именно печатает? текст.длина()? - person tino; 12.03.2014
comment
Да, он выводит длину строки, а не только количество строчных букв. - person Birgir; 12.03.2014
comment
Извините, это была моя ошибка, код, который вы написали, работает отлично. Я случайно поставил точку с запятой после оператора else if. - person Birgir; 14.03.2014
comment
Ах... рад это слышать! Я действительно не мог понять это :) - person tino; 14.03.2014

Вы можете сделать это довольно легко, если сначала преобразуете строку в char[]. Затем вы можете использовать isUpperCase(char c) для каждого символа в строке. http://www.tutorialspoint.com/java/character_isuppercase.htm

person 9er    schedule 11.03.2014

По какой-то странной причине ваш цикл for относится к пустой строке, которую вы только что объявили, а не к строке, которую вы только что прочитали от пользователя. Однако, если вы измените это, внутри вашего цикла вы можете получить отдельные символы в строке с помощью strengur.charAt(i) и вы можете проверить, является ли буква заглавной с помощью Character.isUpperCase(ch), и вы можете проверить букву в нижнем регистре с помощью Character.isLowerCase(ch).

person David Conrad    schedule 11.03.2014

Похоже, это сработает, если вы не делаете это слишком много. Просто используйте временную строку и получите разницу между ними:

int capLetterCount = originalString.length() - originalString.replaceAll("[A-Z]", "").length();

person aliteralmind    schedule 11.03.2014
comment
Как всем известно, регулярные выражения — правильное решение любой проблемы. - person David Conrad; 11.03.2014

person    schedule
comment
Зачем вам создавать две копии строки, одну в верхнем и одну в нижнем регистре, вместо того, чтобы просто проверять, является ли каждый символ isUpperCase или isLowerCase? Кроме того, использование XOR здесь сбивает с толку, а переменные s1 и s2 имеют неправильную область видимости, а имена бесполезны. Этот код даже не скомпилируется. - person David Conrad; 11.03.2014
comment
Я бы также добавил (ненужные) круглые скобки вокруг тестов на равенство. Мне пришлось посмотреть относительный приоритет == против ^, чтобы убедиться, что это правильно. - person David Conrad; 11.03.2014