Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java源代码中使用大型文本片段_Java_Text_Heredoc - Fatal编程技术网

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

在Java源代码中使用大型文本片段,java,text,heredoc,Java,Text,Heredoc,在Java源代码中有没有处理文本块(字符串)的好方法?许多其他语言都有可用的语法,但Java没有。这使得处理诸如输出大量静态标记的标记库和需要对XML块进行比较的单元测试之类的东西非常不方便 其他人是如何解决这个问题的?有可能吗?或者我必须忍受它吗?如果文本是静态的,或者可以参数化,一个可能的解决方案是将其存储在外部文件中,然后导入。但是,这会创建可能不必要或对性能有影响的文件I/O。使用此解决方案需要缓存文件内容以减少文件读取次数。同时可以使用某些格式化程序转换和嵌入任何文本文件或长文本 作为

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


其他人是如何解决这个问题的?有可能吗?或者我必须忍受它吗?

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

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

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

我同意,在单元测试的情况下,如果您想将事物与模拟进行比较,则需要进行大规模的文本比较。然而,当您处理如此大的文件时,您通常会有一些测试,这些测试可以在几个不同的大输入上工作,以产生几个大输出,那么为什么不让您的测试加载适当的文件,而不是内联它呢


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

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


我认为Rob可能在描述java应用程序中没有利用ORM的大型多行SQL字符串,或者做了很多不支持ORM的SQL工作。这些绝对是逻辑和代码的一部分,是java中需要使用的PITA。我认为我也不想将它们存储在db中。-1通常,阅读直接在Java代码中包含XML或SQL脚本的测试装置更容易。使用额外的文件来回切换或在DOM树非常大时手动构建DOM树是非常烦人的。您最终不得不测试测试代码。另请参见:(同一问题;稍后发布,但有许多确定答案)