【问题标题】:Read data from string formatted as table从格式化为表格的字符串中读取数据
【发布时间】:2018-05-23 11:05:34
【问题描述】:

我有一个以表格格式编写的字符串(标题,标题下方的值列表) 如何解析字符串:

查看我的字符串示例

titel1           titel2             titel3          titel4
value1                              value3          value4

请注意,有时我的值是空的。

谁能帮帮我?

【问题讨论】:

  • 预期输出是什么?
  • 用什么字符分隔列?我们真的需要知道这一点才能给你有意义的答案。
  • String s = "titel1 titel2 titel3 titel4 value1 value3 value4" 是对您的字符串的精确解析。换句话说:在不知道您想用字符串做什么的情况下,我们无法帮助您。
  • 您可能希望查看更结构化的内容,例如保存数据的Comma Separated Values (CSV) 文件。
  • 预期输出:titel1 -> value1 title2 -> null

标签: java string parsing tabular


【解决方案1】:

如果您有空值,则无法执行此操作。相反,使用“空”标记,可以只是“空”或“空”或任何适合您的(在第一次构建字符串的位置插入此标记)。

然后你有很多解析方法,最基本的是逐个字符迭代你的字符串,使用空格分隔条目,使用换行符分隔你的行,但由于你在 java 中,你可能可以制作一些东西使用 .split 或 .replaceAll 的冷却器。

【讨论】:

    【解决方案2】:

    1) 根据新行\r?\n 拆分字符串。这将为您提供数组中的 n 个元素,每个元素对应于表的一行。
    2) 现在用\t 分割数组的每个元素。这将为您提供一个包含该行的每个列条目的数组。

    String[] records="titel1\ttitel2\ttitel3\ttitel4\nvalue1\t\tvalue3\tvalue4".split("\\n");
    //records array will contain each row as an element
    Arrays.stream(records).forEach(record -> {
      record.split("\\t");
      // Store this. It will give you each column value
    });
    

    希望这对您有所帮助。

    【讨论】:

    • 感谢您的回复,但这不是我需要的。此代码不会将 emty 值分配给 title2
    • 我认为它也会处理空值。 record.split("\\t") 的输出将是 ["value 1", null, "Value 3", "Value 4"]。
    • 我试过并返回大小为 3 [value1,value3,value4] 的数组,但空值未返回为 null
    • 如果您尝试使用我的示例,则会出现错误,我只输入了 3 个值。如果您尝试将 4 个值放入记录中,其中任何一个为空白。那么它将被视为null。否则,您在开始时提到的示例。它总是将 null 作为数组中的第二个元素。我在示例中进行了更改。注意在“Value1”之后我放了两个\t。那就是通知这是一个空白值
    猜你喜欢
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多