如何使用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);
}
结果:
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);
}
结果: