有没有什么好的方法可以在 Java 源代码中处理文本块(字符串)?许多其他语言都有可用的heredoc语法,但Java没有。这使得使用诸如输出大量静态标记的标记库和需要断言与 XML 块进行比较的单元测试之类的东西非常不方便。
其他人如何解决这个问题?甚至可能吗?还是我只能忍受?
如果文本是静态的,或者可以参数化,可能的解决方案是将其存储在外部文件中,然后将其导入。但是,这会创建文件 I/O,这可能是不必要的或会影响性能。使用此解决方案需要缓存文件内容以减少文件读取次数。
Java 中 HereDoc 的关闭选项是 java.text.MessageFormat。你不能嵌入逻辑。它是一个简单的值转义实用程序。没有使用任何变量。您必须使用基于零的索引。只需遵循 javadoc。
http://download.oracle.com/javase/1,5.0/docs/api/java/text/MessageFormat.html
虽然您可以使用某些格式化程序将任何文本文件或长文字转换并嵌入为 Java 字符串(例如,使用换行符、必要的转义符等),但我真的想不出您需要这些功能的常见情况.
软件的趋势通常是将代码与其操作的数据分开。大文本部分,即使只是为了显示或比较,也是数据,因此通常存储在外部。读取文件(甚至将结果缓存在内存中)的成本相当低。国际化更容易。改变更容易。版本控制更容易。可以轻松使用其他工具(例如拼写检查器)。
我同意,在单元测试的情况下,您想将事物与模拟进行比较,您需要进行大规模的文本比较。但是,当您处理如此大的文件时,您通常会有可以处理几个不同的大输入以产生多个大输出的测试,那么为什么不让您的测试加载适当的文件而不是内联呢?
XML 也是如此。事实上,对于 XML,我认为在许多情况下,您会希望读取 XML 并构建一个 DOM 树,然后您将比较它而不是进行可能受空格影响的文本比较。在你的单元测试中手动创建一个 XML 树是很丑的。