使用Java源代码中的大型文本片段

有没有什么好的方法可以在Java源代码中使用文本块(字符串)? 许多其他语言都有heredoc语法可供他们使用,但Java没有。 这使得处理诸如输出大量静态标记的标记库之类的东西以及需要断言与XML块的比较的unit testing非常不方便。

其他人如何解决这个问题? 它甚至可能吗? 或者我只是忍受它?

虽然你可以使用某些格式化程序来转换和嵌入任何文本文件或长文字作为Java字符串(例如,换行符,必要的转义等),但我真的不能想到你需要这些function的频繁情况。

软件的趋势通常是将代码与其运行的数据分开。 大文本部分即使仅用于显示或比较,也是数据,因此通常存储在外部。 读取文件(甚至将结果缓存在内存中)的成本相当低。 国际化更容易。 改变更容易。 版本控制更容易。 可以容易地使用其他工具(例如,拼写检查器)。

我同意,在unit testing的情况下,你想要比较模拟的东西,你需要进行大规模的文本比较。 但是,当你处理这么大的文件时,你通常会有一些测试可以处理几个不同的大输入以产生几个大输出,那么为什么不让你的测试加载适当的文件而不是内联呢?

与XML相同。 实际上,对于XML,我认为在许多情况下你会想要读取XML并构建一个DOM树然后进行比较,而不是进行可能受空白影响的文本比较。 在unit testing中手动创建XML树是很难看的。

如果文本是静态的,或者可以参数化,则可能的解决方案是将其存储在外部文件中然后导入它。 但是,这会创建可能不必要或对性能产生影响的文件I / O. 使用此解决方案需要涉及缓存文件内容以减少文件读取次数。

Java中对HereDoc的关闭选项是java.text.MessageFormat。 你无法嵌入逻辑。 它是一个简单的值逃逸实用程序 没有使用变量。 您必须使用基于零的索引。 只需按照javadoc。

http://download.oracle.com/javase/1,5.0/docs/api/java/text/MessageFormat.html