java 常量字符串过长 编译错误_Java“常量字符串太长”编译错误。 仅在使用Ant时发生,而在使用Eclipse时不发生...

Java“常量字符串太长”编译错误。 仅在使用Ant时发生,而在使用Eclipse时不发生

我在一类中有一些很长的字符串用于初始化用户信息。 在Eclipse中编译时,没有任何错误或警告,并且生成的.jar运行良好。

最近,我决定创建一个要使用的ant构建文件。 每当我用ant编译同一类时,都会收到“常量字符串太长”的编译错误。 我尝试了多种方法来设置ant中的java编译器可执行文件,以确保使用的版本与Eclipse中的版本完全相同。

我宁愿弄清楚如何获得与Ant在Eclipse中获得的相同的成功编译,而不是尝试重新编写代码以动态地连接字符串。

Allan asked 2020-07-10T14:22:52Z

9个解决方案

39 votes

有人试图向您发送消息:-)在花时间摆弄编译器版本时,您可能已经从文本文件中加载了数据-可能是文本文件所在的位置。

退房:

java.util.Properties

Apache Commons FileUtils.readFileToString()

teabot answered 2020-07-10T14:23:20Z

32 votes

我发现我可以使用apache commons lang StringUtils.join(Object [])方法来解决这个问题。

public static final String CONSTANT = org.apache.commons.lang.StringUtils.join( new String[] {

"This string is long",

"really long...",

"really, really LONG!!!"

} );

mrswadge answered 2020-07-10T14:23:40Z

6 votes

以上对我没有任何作用。 我已经创建了一个名称为test.txt的文本文件,并使用以下代码读取了该文本文件

String content = new String(Files.readAllBytes(Paths.get("test.txt")));

Amol Suryawanshi answered 2020-07-10T14:24:01Z

5 votes

类文件中字符串常量的长度在UTF-8编码中限制为2 ^ 16字节,这不应取决于所使用的编译器。 也许您在ant文件中使用的字符集与在eclipse中使用的字符集不同,因此某些字符比以前需要更多的字节。 请检查javac任务的encoding属性。

Jörn Horstmann answered 2020-07-10T14:24:25Z

1 votes

如果确定要在源中放入长字符串,则另一个技巧是避免编译器将其检测为常量表达式。

String dummyVar = "";

String longString = dummyVar +

"This string is long\n" +

"really long...\n" +

"really, really LONG!!!";

这工作了一段时间,但是如果您走得太远,下一个问题就是编译器中的堆栈溢出。 这描述了相同的问题,并且如果您仍然确定的话,将描述如何增加堆栈-问题似乎是现在方法的绝对大小。 同样,在Eclipse中这不是问题。

df778899 answered 2020-07-10T14:24:50Z

0 votes

你有尝试过吗? 我自己从未尝试过,但这是相关的部分:

使用ant javac适配器可以使用javac适配器在Ant脚本中使用Eclipse编译器。 为了使用Eclipse编译器,您只需要在脚本中定义build.compiler属性。 这是一个小例子。

我真的会考虑使您的类标准兼容。 我相信官方的限制是65535,而Eclipse更宽容的事实在最不方便的时候可能会改变您的情况,无论是哪种方式不断地使用Eclipse编译项目,都可能真的开始限制您。 很多方法。

Yishai answered 2020-07-10T14:25:20Z

0 votes

String theString2 = IOUtils.toString(new FileInputStream(new

File(rootDir + "/properties/filename.text")), "UTF-8");

Monis Majeed answered 2020-07-10T14:25:36Z

0 votes

将字符串添加到values / strings.xml中,而不是调用getResources.getString(R.string.yourstring)

xevser answered 2020-07-10T14:25:56Z

-4 votes

你可以试试看

public static final String CONSTANT = new StringBuilder("Your really long string").toString();

Johjen K Mathew answered 2020-07-10T14:26:17Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值