0

我在文件中有如下数据:

name: "Clooney, George", release: "2013", movie: "Gravity", imdb: "9",
name: "Pitt, Brad", release: "2004", movie: "Ocean's 12", imdb: "8",
name: "Clooney, George", release: "2004", movie: "Ocean's 12", imdb: "8",
name: "Pitt, Brad", release: "1999", movie: "Fight Club", imdb: "9",

我需要按如下方式输出:

name: "Clooney, George", movie: "Gravity",
name: "Clooney, George", movie: "Ocean's 12",
name: "Pitt, Brad", movie: "Ocean's 12",
name: "Pitt, Brad", movie: "Fight Club",

我对Java非常陌生。有人可以给我一些关于如何完成这项工作的提示和指示吗?

谢谢,TM

4

4 回答 4

1

为此,请参阅 String 的文档:

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html

在那里,您可能会发现许多有用的方法来使用字符串执行任何类型的操作。

要走的算法:

a)将你的字符串分成更小的块

b) 使用块

  • 提示:可以用正则表达式拆分

只要你总是忽略 release 和 imdb,你也可以用空行(“”)替换。它会更容易。

于 2013-11-02T11:28:07.477 回答
1

从长远来看,我建议您重新格式化文件中的内容,尝试遵循 JSON 标准,然后 org.json 库将能够为您提供很多帮助。否则,你会有一些难看的硬编码行去搜索、解析String,以后会难以阅读和维护。

JSONObject jsonObj = new JSONObject(\"name\": \"value\", \"release\": "\2013\", \"movie\": \"Gravity\", \"imdb\": \"9\");

另请参阅org.json

于 2013-11-02T11:34:06.860 回答
1
public static void main (String [] args){
        File file = new File("data.txt");

            Scanner scanner;
            try {
                scanner = new Scanner(file);

                while (scanner.hasNextLine()) {
                    String line = scanner.nextLine();
                    System.out.println(line);

                    line = line.substring(7, line.length()-1);
                    String name = line.substring(0, line.indexOf("\"")-1);

                    int index = line.indexOf("movie: \"");
                    line = line.substring(index+8, line.length()-1);
                    String movie = line.substring(0, line.indexOf("\"")-1);

                    System.out.println("name: \"" + name + "\", movie: \"" + movie + "\",");
                }
                scanner.close();

            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


    }
于 2013-11-02T11:36:56.540 回答
1

由于这很可能是一个学习练习,因此这里描述了您可以采取的方法:

  • 首先编写一个ActorMovie将演员姓名和电影名称结合在一起的类。
  • ActorMovie添加解析字符串并为您提供对象的构造函数或工厂函数
  • 创建ActorMovie对象列表
  • 按演员姓名对列表进行排序
  • 以您想要的格式打印列表。

该类ActorMovie可能如下所示:

class ActorMovie {
    private String actorName;
    private String movieName;
    private int releaseYear;
    private int imdbRating;
    public ActorMovie(
        String actorName
    ,   String movieName
    ,   int releaseYear
    ,   int imdbRating) {
        this.actorName = actorName;
        this.movieName = movieName;
        this.releaseYear = releaseYear;
        this.imdbRating = imdbRating;
    }
    public String getActorName() {return actorName;}
    public String getMovieName() {return movieName;}
    public int getReleaseYear() {return releaseYear;}
    public int getImdbRating() {return imdbRating;}
    public static ActorMovie parse(String str) {
        ... // Add code to parse the string in the format that you specified
        return new ActorMovie(....);
    }
}

您有许多解析选项 - 您可以使用正则表达式来匹配整个字符串,或者逐个字符地遍历字符串,避免使用双引号括起来的逗号。

对于排序List<ActorMovie>对象使用Collections.sort方法:

List<ActorMovie> data = ... // Obtain a list
data.sort(data, new  Comparator<ActorMovie> {
    public compare(ActorMovie o1, ActorMovie o2) {
        return o1.getActorName().compareTo(o2.getActorName());
    }
});
于 2013-11-02T11:37:37.733 回答