【问题标题】:How to check if a char is upper/lowercase?如何检查字符是否为大写/小写?
【发布时间】:2020-07-16 17:24:34
【问题描述】:

以下代码应该将字母转换为数字并给出总和,但忽略任何大写字母。

例子:

输入 abcde 应返回 15。输入 abCde 应返回 12。

感谢任何帮助。

static int strScore(String str[], String s, int n) { 
    int score = 0, index=0; 

    for (int i = 0; i < n; i++) { 
        if (str[i] == s) { 

        for (int j = 0; j < s.length(); j++) 
            score += s.charAt(j) - 'a' + 1; 
            index = i + 1; 
            break; 
        } 
    } 

    score = score * index; 
    return score; 
} 

public static void main(String[] args) {        
    String str[] = { "abcde" };
    String s = "abcde"; 

    int n = str.length; 
    int score = strScore(str, s, n); 
    System.out.println( score); 
}

【问题讨论】:

  • 为什么你需要String str[] = { "abcde" };,它有一个等于s?当您可以简单地使用 str.length 时,为什么还需要 n ?此解决方案中还有什么是递归的?
  • NarrowSky - 如果其中一个答案解决了您的问题,您可以通过将其标记为已接受来帮助社区。接受的答案有助于未来的访问者自信地使用该解决方案。查看meta.stackexchange.com/questions/5234/… 了解如何操作。

标签: java parameters lowercase


【解决方案1】:

使用Character.isLowerCase(...)

这就是你的strScore 方法应该是这样的:

static int strScore(String str[], String s, int n) { 
    int score = 0, index = 0; 
    for (int i = 0; i < n; i++) { 
        if (str[i].equals(s)) { 
            for (int j = 0; j < s.length(); j++) {
                char c = s.charAt(j);
                if(Character.isLowerCase(c)) // <-- This is the important part
                    score += c - 'a' + 1;
            }
            index = i + 1; 
            break; 
        } 
    }

    score = score * index; 
    return score; 
}

正如 cmets 中所指出的,不需要 str,因此也不需要 n 参数。这是一个更好的版本:

static int strScore(String s) { 
    int score = 0;

    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);
        if(Character.isLowerCase(c))
            score += c - 'a' + 1;
    }

    return score; 
}

【讨论】:

  • 尝试static int strScore(String s, int n) { 并简单地删除多余的if (str[i].equals(s)) { 。你会得到同样的结果。无论如何+1,因为方法签名存在问题。
  • @c0der 我知道这是不必要的,但这就是 OP 在问题中显示它的方式,我只想更改必要的内容。不过我会添加一个干净的版本。
【解决方案2】:

有两点需要解决:

  1. 您已使用== 比较字符串。您需要使用.equals
  2. 你需要像if(s.charAt(j)&gt;= 'a' &amp;&amp; s.charAt(j)&lt;'z')这样打勾
for (int i = 0; i < n; i++) { 
    if (str[i].equals(s)) { 
        for (int j = 0; j < s.length(); j++) 
            if(s.charAt(j)>= 'a' && s.charAt(j)<'z') {
                score += s.charAt(j) - 'a' + 1; 

【讨论】:

  • 我在我提出的解决方案中使用了if(s.charAt(j)&gt;= 'a' &amp;&amp; s.charAt(j)&lt;'z')。谢谢。 +1。我认为不需要if (str[i].equals(s))
  • 感谢@c0der 的支持。
【解决方案3】:

你可以避免传递String str[] = { "abcde" };,它有一个元素等于s 到方法。你也可以避免传递n,这是一个简单的str.length()

static int strScore(String s) {
    int score = 0, index = 0;
    for (int i = 0; i < s.length(); i++) {
        for (char c : s.toCharArray()) { 
            if(c >= 'a' && c <'z') {     //alternatively if(Character.isLowerCase(c))
                score += c - 'a' + 1;
            }
        }
        index = i + 1;
        break;
    }
    score = score * index;
    return score;
}

【讨论】:

    猜你喜欢
    • 2015-02-08
    • 1970-01-01
    • 2020-10-21
    • 2015-04-23
    • 2011-09-15
    • 1970-01-01
    • 2011-03-31
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多