Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我怎么能只看电影的名字?_Java_Java.util.scanner_Bufferedreader_Readfile - Fatal编程技术网

Java 我怎么能只看电影的名字?

Java 我怎么能只看电影的名字?,java,java.util.scanner,bufferedreader,readfile,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

我有这样的数据

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

感谢您提前提供帮助。

只有当您将所有行都设置为那样的格式时,此操作才有效

私有静态最终字符串FILENAME=“pathToFile”

publicstaticvoidmain(字符串[]args){
BufferedReader br=null;
FileReader fr=null;
ArrayList输出=新的ArrayList();
试一试{
//br=新的BufferedReader(新的文件读取器(文件名));
fr=新文件读取器(文件名);
br=新的缓冲读取器(fr);
串电流线;
而((currentLine=br.readLine())!=null){
字符串movie=currentLine.split(“\\(”)[0];
输出。添加(电影);
}
}捕获(IOE异常){
e、 printStackTrace();
}最后{
试一试{
如果(br!=null)
br.close();
如果(fr!=null)
fr.close();
}捕获(IOEX异常){
例如printStackTrace();
}
}
}

非常简单,只需在“(”上拆分,并记住使用
\
将其转义

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];
    }

可以使用正则表达式提取所需的零件。 假定电影标题仅包含单词字符或空格

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");
    }

}
List movieInfos=Arrays.asList(
“1 |玩具总动员(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 |四个房间(1995年)| 1995年1月1日||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 |变矮(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 |抄袭(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.compile(“^(\\d+\\\\\”([\\w\\s]+)\\(\\d{4}\\).$”;
for(字符串movieInfo:movieInfos){
Matcher Matcher=pattern.Matcher(movieInfo);
if(matcher.matches()){
字符串id=matcher.group(1);
字符串标题=matcher.group(2);
System.out.println(String.format(“%s |%s”,id,title));
}否则{
System.out.println(“意外数据”);
}
}

假设您正在阅读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
在这方面,有两件事你必须注意。 (这里我们假设我们正在阅读第一行)

  • 被|分割。现在由于|是一个元字符,您必须使用它来转义。因此,.nextLine()中的
    Split(“\\\\”);

  • 现在,arr[0]将包含1,arr[2]将包含玩具总动员(1995)。因此,我们通过“(”)拆分arr[2]。您需要第一个匹配项,因此可以将其编写为
    arr[1]。拆分(\\(”[0])
    (您必须再次将其转义为“(”也是一个元字符)


  • PS:
    如果(arr.length>1)
    此行是为了避免出现空白新行,这样您就不会出现ArrayIndexOutOfBoundsException。

    考虑到文件格式与您给定的格式相同,请逐行读取文件,对于每一行,在“(”上拆分它用括号括起来并打印拆分操作后获得的结果数组中的第一个索引

    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();
        }
    }
    

    您可以以字符串形式保存数据

    比如说

    String name =  //data of move
    
    然后使用if with is 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);
     }
    

    for(int i=0;iIt的明显操作是java初学者。IMO没有必要用正则表达式使解决方案复杂化。可能的
    
    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);
     }