如何使用java解析字符串以获取特定信息?

时间:2016-02-14 06:55:59

标签: java string parsing split delimiter

以下是文件中的一些行,我不知道如何解析它以提取4条信息。

11::American President, The (1995)::Comedy|Drama|Romance
12::Dracula: Dead and Loving It (1995)::Comedy|Horror
13::Balto (1995)::Animation|Children's
14::Nixon (1995)::Drama

我想获得号码,标题,发布日期和类型。 类型有多种类型,所以我想将每个类型保存在一个变量中。

我正在使用.split("::|\\|");方法来解析它,但我无法解析发布日期。

任何人都可以帮助我!

2 个答案:

答案 0 :(得分:0)

最简单的是匹配正则表达式,类似这样的

  String x = "11::Title (2016)::Category";
  Pattern p = Pattern.compile("^([0-9]+)::([a-zA-Z ]+)\\(([0-9]{4})\\)::([a-zA-Z]+)$");
  Matcher m = p.matcher(x);
  if (m.find()) {
    System.out.println("Number: " + m.group(1) + " Title: " + m.group(2) + " Year: " + m.group(3) + " Categories: " + m.group(4));
  }

(请不要让我知道确切的语法,只是出于我的想法)

然后首先捕获数字,第二个将是名称,第三个是年份,第四个是类别集合,然后您可以按' |'。

您可能需要调整标题和类别的有效字符,但您应该明白这一点。

如果您有多行,请先将它们拆分为一个ArrayList,然后在循环中单独处理每一行。

答案 1 :(得分:0)

试试这个

String[] s =  {
    "11::American President, The (1995)::Comedy|Drama|Romance",
    "12::Dracula: Dead and Loving It (1995)::Comedy|Horror",
    "13::Balto (1995)::Animation|Children's",
    "14::Nixon (1995)::Drama",
};
for (String e : s) {
    String[] infos = e.split("::|\\s*\\(|\\)::");
    String number = infos[0];
    String title = infos[1];
    String releaseDate = infos[2];
    String[] genres = infos[3].split("\\|");
    System.out.printf("number=%s title=%s releaseDate=%s genres=%s%n",
          number, title, releaseDate, Arrays.toString(genres));
}

输出

number=11 title=American President, The releaseDate=1995 genres=[Comedy, Drama, Romance]
number=12 title=Dracula: Dead and Loving It releaseDate=1995 genres=[Comedy, Horror]
number=13 title=Balto releaseDate=1995 genres=[Animation, Children's]
number=14 title=Nixon releaseDate=1995 genres=[Drama]