如何使用Character.toUpperCase?

How to use Character.toUpperCase?

    for(int i=0;i<chInp.length();i++)
    {
        if(chInp.charAt(i)=='a' || chInp.charAt(i)=='e' || chInp.charAt(i)=='i' || chInp.charAt(i)=='o'|| chInp.charAt(i)=='u')
        {
            Character.toUpperCase(chInp.charAt(i));
        }
    }

该程序搜索一个字符串,识别所有元音并将它们放入大写。我测试过它能够成功识别元音,但是它没有把它们变成大写。

由于此行将 chInp.charAt(i) 放入 uppercase 中,因此您没有分配值:

Character.toUpperCase(chInp.charAt(i));

更新:因为不允许您这样做:

chInp.charAt(i) = Character.toUpperCase(chInp.charAt(i));

要分配新值,请使用 StringBuilder

在循环创建之前:

StringBuilder mString = new StringBuilder(chInp);

在循环内部,分配新值:

mString.setCharAt(i, Character.toUpperCase(chInp.charAt(i)));

您必须创建一个新字符串并将字符附加到它:

String s="";
for(int i=0;i<chInp.length();i++)
 {
    if(chInp.charAt(i)=='a' || chInp.charAt(i)=='e' || chInp.charAt(i)=='i' || chInp.charAt(i)=='o'|| chInp.charAt(i)=='u')
    {
        s+=Character.toUpperCase(chInp.charAt(i));
    } else s+=chlnp.charAt (i);
}

Character.toUpperCase() 是一种方法,当给定一个 char 作为参数时,将 return 另一个 char 这是 [=12= 的大写版本], 对于 "uppercase" 的一些定义。它不会做的是 "magically" 更改该 char 来自的底层存储,以便将提取的值替换为新值。两个原因:

  • Java是传值;
  • 更改原始来源中的内容将被视为副作用。

即使上面的两个陈述对 Java 不成立,你还是会遇到另一个问题,这个问题很简单:String 是不可变的;您不能更改 String.

的内容

改用StringBuilder

final int len = chInp.length();
final StringBuilder sb = new StringBuilder(len);

char c;

for (int i = 0; i < len; i++) {
    c = chInp.charAt(i);
    switch (c) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            sb.put(Character.toUpperCase(c));
            break;
        default:
            sb.put(c);
    }
}

return sb.toString();

您的代码没有将新的大写字母添加到字符串中,因此您看不到结果。在 Java 中不可能修改字符串中的一个字符,因此您必须采取稍微不同的方法。我会将字符串转换为字符数组,修改我需要的值,然后将其转换回字符串。

    char[] letters = chInp.toCharArray();

    for(int i = 0; i < letters.length; i++){
        if(letters[i]=='a' || letters[i]=='e' || letters[i]=='i' || letters[i]=='o'|| letters[i]=='u'){
            letters[i] = Character.toUpperCase(letters[i]);
        }
    }

    chInp = new String(letters);

尽管已经选择了答案并且给出的所有答案都是好的答案,但令我感到非常惊讶的是没有人想到String.replaceAll(字符串正则表达式,字符串替换).无需手动检查字符串中是否包含元音字母,因为 String.replaceAll 会为您完成。

public static void main(String[] args) {
    String testString = "the quick brown fox jumps over the lazy dog";
    String testStringNoVowels = "fly fly fly fly fly";
    char[] vowels = new char[] {'a', 'e', 'i', 'o', 'u'};

    System.out.println("Test String (With Vowels) Before: " + testString);
    System.out.println("Test String (No Vowels) Before  : " + testStringNoVowels);
    for (char vowel : vowels) {
        testString = testString.replaceAll(String.valueOf(vowel), String.valueOf(Character.toUpperCase(vowel)));
        testStringNoVowels = testStringNoVowels.replaceAll(String.valueOf(vowel), String.valueOf(Character.toUpperCase(vowel)));
    }
    System.out.println("");
    System.out.println("Test String (With Vowels) After : " + testString);
    System.out.println("Test String (No Vowels) After   : " + testStringNoVowels);
}

结果: