我是java新手,正在编写一个程序,可以输入你的名字和姓氏,并提供你的首字母缩写,但我希望首字母总是大写。
每当我运行代码时,我都会收到一个"不能取消引用字符"的错误。
import java.util.*;
public class InitialHere
{
public static void main (String[] args)
{
Scanner getInput = new Scanner (System.in);
String firstName;
String lastName;
char firstInitial;
char lastInitial;
System.out.println("What is your first name?");
System.out.println();
firstName = getInput.nextLine();
System.out.println();
System.out.println("Thankyou, what is your last name?");
System.out.println();
lastName = getInput.nextLine();
firstInitial = firstName.charAt(0);
lastInitial = lastName.charAt(0);
firstInitial = firstInitial.toUpperCase();
lastInitial = lastInitial.toUpperCase();
System.out.println();
System.out.println("Your initials are " + firstInitial + "" + lastInitial + ".");
}
}
在Java中,基元没有方法,只有它们的装箱类型有。如果你想获得char
的大写版本,Character
类就有一个方法:Character.toUpperCase
:
firstInitial = Character.toUpperCase(firstInitial);
(对lastInitial
执行相同操作)
firstInitial
的类型为char
,没有方法toUpperCase
。(作为一个基元,它根本没有方法。)改为在原始String
上调用toUpperCase
。
更新(见注释):Character.toUpperCase
的文档中写道:
通常,
String.toUpperCase()
应用于将字符映射为大写。String
病例映射方法比Character
病例映射方法有几个优点。String
大小写映射方法可以执行区域设置敏感映射、上下文敏感映射和1:M字符映射,而Character
大小写映射法则不能。
因此,最稳健的方法是使用
String firstName = firstName.trim(); // ignore leading white space
final String firstInitial = firstName.substring(0, firstName.offsetByCodePoints(0, 1)).toUpperCase();
另一个解决方案:
firstInitial = (char) (firstInitial >= 97 && firstInitial <= 122 ? firstInitial - 32 : firstInitial);
lastInitial = (char) (lastInitial >= 97 && lastInitial <= 122 ? lastInitial - 32 : lastInitial);