我怎样才能阅读电影名称?

时间:2017-12-30 10:26:55

标签: java java.util.scanner bufferedreader readfile

我有这样的数据

1|Toy Story (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Toy%20Story%20(1995)|0|0|0|1|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0

2|GoldenEye (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?GoldenEye%20(1995)|0|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0

3|Four Rooms (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Four%20Rooms%20(1995)|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0

4|Get Shorty (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Get%20Shorty%20(1995)|0|1|0|0|0|1|0|0|1|0|0|0|0|0|0|0|0|0|0

5|Copycat (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Copycat%20(1995)|0|0|0|0|0|0|1|0|1|0|0|0|0|0|0|0|1|0|0

并假设链接部分与电影名称部分在同一行。我是

仅对最左边部分的电影号码和电影名称感兴趣。

如何在Java中读取此文件并返回如下:

1|Toy Story

2|GoldenEye

感谢您提前帮助。

6 个答案:

答案 0 :(得分:1)

非常简单,只需拆分“(”并记住使用\\转义它。

public static void main(String[] args) {

        String result = movie("1|Toy Story (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Toy%20Story%20(1995)|0|0|0|1|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0");
        System.out.println(result);   //prints 1|Toy Story
    }

    public static String movie(String movieString){
        return movieString.split(" \\(")[0];
    }

答案 1 :(得分:1)

您可以使用正则表达式来提取所需的部分。 假设电影标题仅包含单词字符或空格。

List<String> movieInfos = Arrays.asList(
        "1|Toy Story (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Toy%20Story%20(1995)|0|0|0|1|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0",
        "2|GoldenEye (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?GoldenEye%20(1995)|0|1|1|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0",
        "3|Four Rooms (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Four%20Rooms%20(1995)|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|0|1|0|0",
        "4|Get Shorty (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Get%20Shorty%20(1995)|0|1|0|0|0|1|0|0|1|0|0|0|0|0|0|0|0|0|0",
        "5|Copycat (1995)|01-Jan-1995||http://us.imdb.com/M/title-exact?Copycat%20(1995)|0|0|0|0|0|0|1|0|1|0|0|0|0|0|0|0|1|0|0"
);

Pattern pattern = Pattern.compile("^(\\d+)\\|([\\w\\s]+) \\(\\d{4}\\).*$");

for (String movieInfo : movieInfos) {

    Matcher matcher = pattern.matcher(movieInfo);
    if (matcher.matches()) {
        String id = matcher.group(1);
        String title = matcher.group(2);

        System.out.println(String.format("%s|%s", id, title));
    } else {
        System.out.println("Unexpected data");
    }

}

答案 2 :(得分:0)

只有在你完成所有这些格式化的情况下,这才有效。

private static final String FILENAME =&#34; pathToFile&#34;;

.questions label:before

答案 3 :(得分:0)

假设您正在阅读t.txt

File file = new File("t.txt");    
        try {
            Scanner in = new Scanner(file);
            while(in.hasNextLine())
            {

                String arr[] = in.nextLine().split("\\|");
                if(arr.length > 1)
                {
                    System.out.println(arr[0] +"|"+arr[1].split("\\(")[0]);
                    System.out.println();
                }
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

将作为输出

1|Toy Story 

2|GoldenEye 

3|Four Rooms

4|Get Shorty 

5|Copycat

你需要注意两件事。 (这里我们假设我们正在阅读第一行)

  1. 拆分|。现在自|是一个必须用来逃避它的元字符。因此in.nextLine().split("\\|");

  2. 现在arr [0]将包含1,而arr [2]将包含玩具总动员(1995)。因此我们将arr [2]拆分为“(”。你需要第一次匹配,因此你可以把它写成arr[1].split("\\(")[0])(你再次必须将其转义为“(”也是元字符)。

    < / LI>

    PS:if(arr.length > 1)这一行是为了避免空白的新行,这样你就不会得到ArrayIndexOutOfBoundsException。

答案 4 :(得分:0)

考虑到文件格式与您给出的相同,请逐行读取文件,对于每个读取行,将其拆分为&#34;(&#34;括号并在结果数组中打印第一个索引)分手术后获得。

static void readMovieNamesFromFile(String fileName)  {
    try (BufferedReader br = new BufferedReader(new FileReader(new File(fileName)))) {
        String line;
        while( (line = br.readLine()) != null){
            System.out.println((line.split("\\(")[0]).trim());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

答案 5 :(得分:-1)

您可以将数据保存在字符串

例如

String name =  //data of move

然后使用if with char

for(int i =0;i<name.lenght;i++)
   {
       if(name.charat(i).equals("(")  //will read when it catch ( after name it will stop 
            {Break;}
            Else 
               System.out.print("name.charat(i);
 }

你也可以通过其他方式修复