1. 程式人生 > 程式設計 >android studio錯誤: 常量字串過長的解決方式

android studio錯誤: 常量字串過長的解決方式

android studio 錯誤: 常量字串過長錯誤

省市區三級聯動,位置字串。

這樣不行

android studio錯誤: 常量字串過長的解決方式

改用json方案 ,讀取array中檔案

  String provsData = new GetJsonDataUtil().getJson(activity,"provsData.json");//獲取assets目錄下的json檔案資料
  String distsData = new GetJsonDataUtil().getJson(activity,"distsData.json");//獲取assets目錄下的json檔案資料
  String citysData = new GetJsonDataUtil().getJson(activity,"citysData.json");//獲取assets目錄下的json檔案資料
public class GetJsonDataUtil {


  public String getJson(Context context,String fileName) {

    StringBuilder stringBuilder = new StringBuilder();
    try {
      AssetManager assetManager = context.getAssets();
      BufferedReader bf = new BufferedReader(new InputStreamReader(
          assetManager.open(fileName)));
      String line;
      while ((line = bf.readLine()) != null) {
        stringBuilder.append(line);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
    return stringBuilder.toString();
  }
}

補充知識:關於Java的String字串常量的長度問題

雖然這種問題應該很難遇到,但是遇到了也會感到莫名其妙。不知道大家有沒有遇到那種在java程式碼裡用字串寫sql語句的情況,但是如果sql語句字串的長度太長的話就會報錯。

程式碼如下:

程式碼A

String str = "567890123456789...0123456789";//由於字串長度太長,所以省略一部分,長度是65535
System.out.println(str.length()); //編譯報錯:Error:(14,22) java: 常量字串過長

程式碼B

String str = "67890123456789...0123456789";//由於字串長度太長,所以省略一部分,長度是65534

System.out.println(str.length()); //編譯通過,執行結果為:65534

程式碼C

String str = "67890123456789...0123456789";//由於字串長度太長,所以省略一部分,長度是65534
str = "5" + str;
System.out.println(str.length());  //編譯通過,執行結果為:65535

String內部是以char陣列的形式儲存,陣列的長度是int型別,那麼String允許的最大長度就是Integer.MAX_VALUE = 2^31 - 1 = 2147483647。又由於java中的字元是以16位儲存的,因此大概需要4GB的記憶體才能儲存最大長度的字串。

不過這僅僅是對字串變數而言,如果是字串常量,如“abc”、”1234”之類寫在程式碼中的字串str,那麼允許的最大長度取決於字串在常量池中的儲存大小,也就是字串在class格式檔案中的儲存格式:

CONSTANT_Utf8_info {
  u1 tag;
  u2 length;
  u1 bytes[length];
}

u2是無符號的16位整數,因此理論上允許的string str的最大長度是2^16-1=65535。然而實際測試表明,允許的最大長度僅為65534,超過就編譯錯誤。

以上這篇android studio錯誤: 常量字串過長的解決方式就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。