簡體   English   中英

使用.toUpperCase()編譯代碼時,獲取“字符不能取消引用錯誤”;

[英]Getting a 'char cannot be dereferenced error' when compiling code using .toUpperCase();

我是java的新手,正在編寫一個程序,該程序可以讓您輸入名字和姓氏,並為您提供首字母縮寫,但是我希望initiinal始終使用大寫形式。

每當我運行代碼時,都會出現“無法取消引用字符”錯誤。

    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執行相同lastInitial

firstInitialchar類型的,沒有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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM