java - groovy从文件读取数据

标签 java file groovy

我需要一些帮助来从 txt 文件读取数据。我想指出该行是否位于“项目”部分内。如果是这样,请查找 com.google.maps.api:1.9.10。我应该获取它是否在 project 部分中的信息。 我不在这里提供任何源代码,因为我不知道如何考虑这种情况。也许您知道如何解决这个问题。

示例输入:

以下来自文件的示例数据:

+--- project :google-json
|    +--- other data
|    +--- other data
|    +--- com.google.maps.api:1.9.10
|    +--- other data
+--- something :google-json
|    +--- other data
|    +--- other data
|    +--- com.google.maps.api:2.2.2
|    +--- other data

最佳答案

这里的第一个想法是循环遍历用新行字符 (\n) 分割的行,然后检查您是否位于适当的部分,然后验证后续行是否包含所需的值。如果是的话就找到了,否则就没有找到。

第二个想法是使用更多面向数据的方法。使用正则表达式将数据拆分为多个部分,然后将它们转换为元组,并查找具有适当名称的元组,该元组的值中将包含所需的值。事情是这样的:

def input = '''
+--- project :google-json
|    +--- other data
|    +--- other data
|    +--- com.google.maps.api:1.9.10
|    +--- other data
+--- something :google-json
|    +--- other data
|    +--- other data
|    +--- com.google.maps.api:2.2.2
|    +--- other data
'''
input
    .split(/(?ms)(^\+--- )/)
    .toList()
    .findAll { !it.trim().isEmpty() }
    .collect {
        def section = it.substring(0,it.indexOf('\n'))
        new Tuple(
            section,
            (it - section)
            .trim()
            .split('\n')
            .collect { (it - '|    +---').trim() }
        )
    }
   .find {
       it.get(0) == 'project :google-json' && it.get(1).find { 'com.google.maps.api:1.9.10'.equals(it) }
   }
  1. 使用适当的正则表达式分割行 - 此处,以 +--- 开头的行是分隔符。
  2. 由于 split 返回数组,因此将其转为 int 列表。
  3. 删除所有空元素。
  4. 将数据转换为元组。第一个值是部分名称(例如 project :google-json),第二个值是删除了 ASCII 艺术树元素的依赖项列表。
  5. 找到所需的元组。

关于java - groovy从文件读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46993504/

相关文章:

java File.separator 在 Windows 上的文件路径中变为 "%"

excel - 使用groovy grails上载和读取excel文件并将数据插入数据库

java - 如何使用我的 Java/Android 应用程序进行 SSH?

java - 远程编译和执行Java

C# FileInfo - 查找重复文件

c# - 文件路径中的空格

linux - 使用 Groovy 脚本在 Jenkins 中解析动态选择参数的文件名

groovy - 我如何在 groovy 的 grep 中使用变量?

java - 错误: "binary literals are not supported at this language level "

java - 如何在 DialogFragment 中获取(或模拟)ViewPager?