以下是文件中的一些行,我不知道如何解析它以提取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("::|\\|");
方法来解析它,但我无法解析发布日期。
任何人都可以帮助我!
答案 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]