获取' char无法解除引用错误'使用.toUpperCase()编译代码时;

时间:2014-09-28 15:12:22

标签: java char dereference

我是java的新手,我正在编写一个程序,可以让你输入你的名字和名字,并会给你你的姓名缩写,但我希望这些原始文件总是大写。

每当我运行代码时,我都会收到“char not be dereferenced”错误。

    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 + ".");

        }
    }

3 个答案:

答案 0 :(得分:4)

在Java中,原语没有方法,只有它们的盒装类型。如果您想获得char的大写版本,Character类只有一个方法:Character.toUpperCase

 firstInitial = Character.toUpperCase(firstInitial);

(对lastInitial执行相同的操作)

答案 1 :(得分:0)

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();

答案 2 :(得分:-1)

另一种解决方案:

firstInitial = (char) (firstInitial >= 97 && firstInitial <= 122 ? firstInitial - 32 : firstInitial);
lastInitial = (char) (lastInitial >= 97 && lastInitial <= 122 ? lastInitial - 32 : lastInitial);