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错误: 常量字符串过长的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考。
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Python-matplotlib 空间栅格数据可视化
- 图解面试题:如何找到喜欢的电影?
- Java agent 与 byte buddy
- 关于TRTC云端混流的踩坑分享
- 聊聊dubbo-go的ConsistentHashLoadBalance
- R语言用WinBUGS 软件对学术能力测验(SAT)建立分层模型
- R语言使用随机技术差分进化算法优化的Nelson
- R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
- R语言和QuantLib中Nelson-Siegel模型收益曲线建模分析
- 用R语言用Nelson Siegel和线性插值模型对债券价格和收益率建模
- R语言LME4混合效应模型研究教师的受欢迎程度
- R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
- R语言中的风险价值模型度量指标TVaR与VaR
- R语言用线性回归模型预测空气质量臭氧数据
- R语言线性模型臭氧预测: 加权泊松回归,普通最小二乘,加权负二项式模型