2009-04-23 9 views
21

¿Hay alguna forma de trabajar con bloques de texto (cadenas) dentro del código fuente de Java? Muchos otros lenguajes tienen la sintaxis heredoc disponible para ellos, pero Java no. Esto hace que resulte bastante incómodo trabajar con elementos como las bibliotecas de etiquetas que emiten una gran cantidad de marcas estáticas, y las pruebas unitarias en las que es necesario realizar comparaciones con bloques de XML.Trabajar con fragmentos de texto grandes en fuente Java

¿Cómo trabajan otras personas al respecto? ¿Es posible? ¿O solo tengo que aguantarlo?

+0

Ver también: http://stackoverflow.com/questions/878573/java-multiline-string (misma pregunta; publicado más tarde, pero con muchas respuestas OK) –

Respuesta

0

Si bien podría utilizar ciertos formateadores para convertir e incrustar cualquier archivo de texto o literal largo como una cadena de Java (por ejemplo, con saltos de nueva línea, los escapes necesarios, etc.), no puedo pensar en situaciones frecuentes donde necesitarías estas capacidades.

La tendencia del software generalmente es separar el código de los datos en los que opera. Las secciones de texto grandes, aunque solo sean para visualización o comparación, son datos y, por lo tanto, típicamente se almacenan externamente. El costo de leer un archivo (o incluso almacenar en caché el resultado en la memoria) es bastante bajo. La internacionalización es más fácil. Cambiar es más fácil. El control de versiones es más fácil. Se pueden usar fácilmente otras herramientas (por ejemplo, correctores ortográficos).

Acepto que en el caso de pruebas unitarias en las que desee comparar elementos con un simulacro, necesitará comparaciones de texto a gran escala. Sin embargo, cuando maneja archivos tan grandes, normalmente tendrá pruebas que pueden funcionar en varias entradas grandes diferentes para producir varias salidas de gran tamaño, así que ¿por qué no simplemente hacer que su prueba cargue los archivos apropiados en lugar de en línea?

Lo mismo ocurre con XML. De hecho, para XML, argumentaría que en muchos casos desearía leer el XML y construir un árbol DOM que luego compararía en lugar de hacer una comparación de texto que puede verse afectada por espacios en blanco. Y crear manualmente un árbol XML en su unidad de prueba es feo.

+7

Creo que Rob podría estar describiendo grandes multi -line cadenas de SQL en aplicaciones Java que no están aprovechando un ORM, o haciendo muchas cosas SQL no soportadas por ORM. Estos son definitivamente parte de la lógica y el código, y son un PITA para trabajar en Java. No creo que me gustaría almacenarlos en el DB tampoco. – r00fus

+10

-1 A menudo es más fácil leer los dispositivos de prueba que tienen las secuencias de comandos XML o SQL directamente en el código de Java. Es muy molesto cambiar de un lado a otro con archivos adicionales o construir un árbol DOM a mano cuando es muy grande. Terminas teniendo que probar el código de prueba. – User1

1

Si el texto es estático o se puede parametrizar, una posible solución sería almacenarlo en un archivo externo y luego importarlo. Sin embargo, esto crea archivos de E/S que pueden ser innecesarios o tener un impacto en el rendimiento. El uso de esta solución debería incluir el almacenamiento en caché del contenido del archivo para reducir el número de lecturas de archivos.

Cuestiones relacionadas