字符串错误“常量字符串太长”

时间:2011-06-11 21:28:58

标签: android

需要显示100,000个字符的文本。如果我把它放到String对象中,我会得到一个错误“常量字符串太长”。 StringBuffer对象也一样。

StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("Long text here........"); //<-- error

除了将文本剪切成较小的文本之外,还有解决方法吗?

4 个答案:

答案 0 :(得分:7)

我认为java中常量字符串的长度限制为64K - 但是,您可以在运行时构造一个大于64K的字符串。

答案 1 :(得分:4)

不允许在java中直接使用超过64k的字符串,但可以间接使用它们。

  • 步骤1)点击你的字符串
  • 步骤2)同时按Alt + Enter键
  • 步骤3)选择Extract String resource
  • 步骤4)为资源命名并按Enter键。

就是这样。它将在strings.xml中为您生成一个字符串 如果您的strings.xml中已有字符串,则可以使用此代码进行检索:

String yourStr = getString(R.string.sampleBigString);

答案 2 :(得分:2)

是常量字符串在java中有限制。

所以你可以做的是将你的String复制到一个文本文件中并放入Assets文件夹的根目录,并通过以下方法从文件中读取。

public String ReadFromfile(String fileName, Context context) {
StringBuilder returnString = new StringBuilder();
InputStream fIn = null;
InputStreamReader isr = null;
BufferedReader input = null;
try {
    fIn = context.getResources().getAssets()
            .open(fileName, Context.MODE_WORLD_READABLE);
    isr = new InputStreamReader(fIn);
    input = new BufferedReader(isr);
    String line = "";
    while ((line = input.readLine()) != null) {
        returnString.append(line);
    }
} catch (Exception e) {
    e.getMessage();
} finally {
    try {
        if (isr != null)
            isr.close();
        if (fIn != null)
            fIn.close();
        if (input != null)
            input.close();
    } catch (Exception e2) {
        e2.getMessage();
    }
}
return returnString.toString();
}

答案 3 :(得分:0)

我遇到了同样的问题,解决方案是将一个很大的字符串常量分配给一个常量,然后将其拆分为几个较小的常量,这些常量分配给新常量并将它们连接起来。

示例:

无法编译的非常大的字符串:

private static String myTooBigText = "...";

将其拆分为多个常量,然后将它们串联在一起进行编译:

private static String mySmallText_1 = "...";
private static String mySmallText_2 = "...";
...
private static String mySmallText_n = "...";

private static String myTooBigText = mySmallText_1 + mySmallText_2 + ... + mySmallText_n;