【问题标题】:Ignoring tags when using readlines in Java在 Java 中使用 readlines 时忽略标签
【发布时间】:2013-02-17 06:24:20
【问题描述】:

假设您有一个包含以下内容的 txt 文件:

<tag><info>George 34 Washington Professor 

Alexander 22 London Student

Jessica 18 Moscow Student<info><tag>

当你使用 readline 从文本文件中舀出参数时如何忽略标签?

【问题讨论】:

  • 是什么文件格式?如果它实际上是 XML(最后是&lt;/info&gt;&lt;/tag&gt;),那么您应该使用XML API。
  • 它在一个文本文件中,标签不打算做任何事情。
  • 是单行吗?
  • 你可以使用 sth(dont know sth about Regex in Java) like Regex.Replace("\", "");删除标签。
  • @MatthewLoch:如果他们不打算做任何事情,他们为什么会在那里?这对我来说似乎很奇怪......

标签: java text readline


【解决方案1】:

正则表达式有什么问题?

Scanner s = new Scanner(new File("file.txt"));
while (s.hasNext())
{
  String line = s.nextLine().replaceAll("<[^>]*>", "");
  System.out.println(line);
}

但是上面的方法不适用于跨多行的标签,你必须做一些更复杂的事情:

Scanner s = new Scanner(new File("file.txt"));
boolean inTag = false;
while (s.hasNext())
{
  String lineTemp = s.nextLine();
  for (char c: line.toCharArray())
  {
    switch (c)
    {
      case '<': inTag = true; break;
      case '>': inTag = false; break;
      default:
        if (!inTag)
          sb.append(c);
    }
  }
  String line = sb.toString();
  System.out.println(line);
}

以上都没有说明&lt;&gt; 的出现除了指示标签的开始和结束之外的任何地方。

【讨论】:

  • 但是如果标签有什么作用呢? readline 命令会忽略它们吗?
【解决方案2】:

您可以使用正则表达式从行中删除标签

String line = line.replaceAll("<.+?>", "");

【讨论】:

    猜你喜欢
    • 2011-04-29
    • 2012-01-03
    • 2015-06-13
    • 2018-12-30
    • 2014-07-13
    • 2023-01-03
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多