将字符串中每隔一个字母转换为大写,仅计算java字符

将字符串中每隔一个字母转换为大写,仅计算java字符,java,string,capitalize,Java,String,Capitalize,我想把字符串中的每一个字母都转换成大写。假设我有一个字符串:“h3e5l!@lo461!28”,我需要查看该字符是否为字母,然后将每隔一个字母转换为大写字母。这是我现在的代码,但它不起作用,我不知道如何修复它 public static void main(String[]args){ String a = "h3e5l!@lo461!28" ; System.out.println(cap(a)); } public static String cap(S

我想把字符串中的每一个字母都转换成大写。假设我有一个字符串:“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;
}
publicstaticvoidmain(字符串[]args){
字符串a=“h3e5l!@lo461!28”;
系统输出打印LN(第(a)章);
}
公共静态字符串帽(字符串a){
对于(int i=0;i
您可以使用
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();
    }
}

您的做法是正确的,但是您不能替换
字符串中的单个字符,您应该使用从
String\tocharray
检索的
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);
}
publicstaticvoidmain(字符串[]args){
字符串a=“h3e5l!@lo461!28”;
系统输出打印LN(第(a)章);
}
公共静态字符串帽(字符串a){
//数字母
int-letterCount=0;
char[]chars=a.toCharArray();
对于(int i=0;i
能否比“它不工作”更具体?这将返回不正确的结果,例如,对于给定的字符串,它将返回
h3e5l@lo461!28这是错误的。它应该返回
h3E5l@Lo461!28
如要求所述:
将每隔一个字母转换为大写。
您的意思可能是
返回新字符串(chars)
@kasptom-即使在进行此更改后,它仍将返回不正确的结果。
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);
}