【问题标题】:Convert every other letter in String to uppercase, counting only characters java将String中的所有其他字母转换为大写,只计算字符java
【发布时间】:2021-02-22 20:56:13
【问题描述】:

我想将字符串中的所有其他字母转换为大写字母。假设我有一个字符串:“h3e5l!@lo461!28”,我需要查看该字符是否为字母,然后将所有其他字母转换为大写。这是我现在的代码,但它不起作用,我不明白如何修复它。

public static void main(String[]args){
    String a = "h3e5l!@lo461!28" ;
    System.out.println(cap(a));
}

public static String cap(String a){
    for(int i = 0; i< a.length(); i++){
        if(Character.isLetter(a.charAt(i)) && i % 2 == 0){
            a.charAt(i) = a.toUpperCase();
        }
    }
    return a;
}

【问题讨论】:

  • 你能比“它不起作用”更具体吗?

标签: java string capitalize


【解决方案1】:

可以使用StringBuilder对象收集所有处理后的字符,最后返回StringBuilder对象。

public class Main {
    public static void main(String[] args) {
        String a = "h3e5l!@lo461!28";

        System.out.println(cap(a));
    }

    public static String cap(String a) {
        int count = 0;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < a.length(); i++) {
            char ch = a.charAt(i);
            // Capitalise every other letter
            if (Character.isLetter(ch) && (++count) % 2 == 0) {
                sb.append(Character.toUpperCase(ch));
            } else {
                sb.append(ch);
            }
        }
        return sb.toString();
    }
}

输出:

h3E5l!@Lo461!28

【讨论】:

    【解决方案2】:

    您在正确的轨道上,但您不能替换 String 中的单个字符,您应该改用从 String#toCharArray 检索到的 char[],如下所示:

    public static void main(String[]args){
       String a = "h3e5l!@lo461!28" ;
      
       System.out.println(cap(a));
    }
    
    public static String cap(String a){
        // count letters
        int letterCount = 0;
        char[] chars = a.toCharArray();
    
        for(int i = 0; i < chars.length; i++){   
            if(Character.isLetter(chars[i])) {
                letterCount += 1;
                if(letterCount % 2 == 0) { // every other letter
                    chars[i] = Character.toUpperCase(chars[i]);
                }
            }
        }
    
        return new String(chars);
    }
    

    【讨论】:

    • 这将返回不正确的结果,例如对于给定的字符串,它将返回错误的h3e5l!@lo461!28。它应该按照要求返回h3E5l!@Lo461!28convert every other letter to capital.
    • 你的意思可能是return new String(chars);
    • @kasptom - 即使在此更改之后,它也会返回错误的结果。
    猜你喜欢
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-28
    • 2020-12-05
    • 1970-01-01
    相关资源
    最近更新 更多