【问题标题】:Working with large text snippets in Java source在 Java 源代码中处理大文本片段
【发布时间】:2010-10-21 10:25:39
【问题描述】:

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

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

【问题讨论】:

标签: java text heredoc


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    Java 中 HereDoc 的关闭选项是 java.text.MessageFormat。 你不能嵌入逻辑。它是一个简单的值转义实用程序。没有使用任何变量。您必须使用基于零的索引。只需遵循 javadoc。

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

    【讨论】:

      【解决方案3】:

      虽然您可以使用某些格式化程序来转换和嵌入任何文本文件或长文本 作为一个 Java 字符串(例如,带有换行符、必要的转义等),我真的想不出你需要这些功能的常见情况。

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

      我同意,在单元测试中,您希望将事物与模拟进行比较,您需要进行大规模的文本比较。但是,当您处理如此大的文件时,您通常会有可以处理几个不同的大输入以产生多个大输出的测试,那么为什么不让您的测试加载适当的文件而不是内联呢?

      XML 也是如此。事实上,对于 XML,我认为在许多情况下您会想要读取 XML 并构建一个 DOM 树,然后您将比较它而不是进行可能受空格影响的文本比较。在你的单元测试中手动创建一个 XML 树是丑陋的。

      【讨论】:

      • 我认为 Rob 可能正在描述未利用 ORM 的 Java 应用程序中的大型多行 SQL 字符串,或者执行大量不支持 ORM 的 SQL 内容。这些绝对是逻辑和代码的一部分,并且是在 java 中使用的 PITA。我也不认为我想将它们存储在数据库中。
      • -1 直接在 Java 代码中读取具有 XML 或 SQL 脚本的测试夹具通常更容易。用额外的文件来回切换或者在非常大的时候手动构建一个 DOM 树是非常烦人的。你最终不得不测试测试代码。
      猜你喜欢
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多