【问题标题】:Counting Upper and Lower characters in a string using an array使用数组计算字符串中的大写和小写字符
【发布时间】:2015-11-25 01:36:40
【问题描述】:

我已经解决这个问题两天了,不知道我哪里出错了。

基本上我需要向用户询问一串单词。 我需要设置一个包含 26 个元素的 int 数组,其中包含小写字母的数量和大写字母的数量。

我无法让程序正确地与数组元素进行比较。到目前为止,这是我的代码:

public class Lab17Array {

    public static void main(String[] args) 
    {
        Scanner kb = new Scanner (System.in);
        int lLetter = 0;
        int uLetter = 0;

        // int[] alph = new int [26];
        int alph [] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        int Alph [] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

        System.out.println("Enter a phrase");
        String user = kb.nextLine();
        // to print out length of word
        System.out.println("Total number of letters is " + user.length());

        for(int i = 0; i < user.length(); i++)
        {


        }

        System.out.println("Upper case letters are:" + uLetter);
        System.out.println("Lower case letters are:" + lLetter);
        int otherL = user.length() - (uLetter + lLetter);

        // to print out other chars that aren't letters
        System.out.println("Number of all other letters is " + otherL );
    }
} 

在我的 for 循环中,我一直在尝试不同的 if 条件。我不知道我错过了什么?

【问题讨论】:

  • 试试 Character.isUpperCase() / .isLowerCase()
  • 确实有效。我在我的 for 循环中使用了它。 for(int i = 0; i
  • 我根本没有看到任何类型的柜台。另外,您还有这些数组或字符 alphAlph 您不使用。既然我在这里:不要有 2 个名称因大小写而异的变量 - 它会回来咬你...
  • 我应该把我用于柜台的代码留在里面,我在复制之前把它拿出来了。感谢您提供有关 var 名称的提示。我会记住这一点的。
  • 您需要对每个字母进行计数,还是只对所有上部进行计数,对所有下部进行计数?如果是每个字母,那么您注释掉的alph 看起来您比当前版本更接近正确的轨道。只需要弄清楚“如何根据ASCII字符代码索引alph....”

标签: java arrays


【解决方案1】:

使用数组

您可以使用String.toCharArray()for-each loop 来迭代您的userInput(您似乎更改了帖子和评论之间的变量名)。无论如何,像

for (char ch : user.toCharArray()) {
    if (Character.isLowerCase(ch)) {
        lLetter++;
    } else if (Character.isUpperCase(ch)) {
        uLetter++;
    }
}

使用正则表达式

您可以通过使用正则表达式从输入中删除所有非小写字符并使用另一个从输入中删除所有非大写字符来减少代码,例如

int lLetter = user.replaceAll("[^a-z]", "").length(); // <-- removes everything not a-z
int uLetter = user.replaceAll("[^A-Z]", "").length(); // <-- removes everything not A-Z

【讨论】:

  • 成功了!谢谢你。我会在调试中运行它来尝试找出到底发生了什么。大声笑不过,谢谢!
【解决方案2】:

试试这个

    int upperCount = 0;
    int lowerCount = 0;
    Scanner sc = new Scanner(System.in);
    String w = sc.nextLine();
    for(int i = 0; i < w.length(); i++){
        if(Character.isUpperCase(w.charAt(i))){
            upperCount++;
        }else{
            lowerCount++;
        }
    }
    System.out.println("Upper Counts are "+upperCount+" lower counts are "+lowerCount);

【讨论】:

  • 这会将“其他”字符计为小写。
  • 如果你愿意,你可以把 else 改成 else if 并检查它是否是小写
  • 没有数组也可以工作。我需要使用数组作为我的解决方案的一部分。
  • 数组应该做什么?你想把用户的话放在那里吗?还是您需要检查每个字母? @b.Bish
  • 我对用户输入的每个字母都检查一次。
【解决方案3】:

试试这个。

    for(int i = 0; i < user.length(); i++)
    {
        int ch = user.charAt(i);
        if (Arrays.binarySearch(alph, ch) >= 0)
            ++lLetter;
        if (Arrays.binarySearch(Alph, ch) >= 0)
            ++uLetter;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-04
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多