我正在尝试将文件输入到我的程序中。输入是一个用“标准输入”的文件。
以下是输入示例:
3 & Pink Frost&Phillipps, Martin&234933 Se quel guerrier io fossi&Puccini, Giacomo&297539 Non piu andrai&Mozart&234933 M'appari tutt'amor&Flotow, F&252905
我的程序是按照标题,作曲家和运行时间的顺序对歌曲/ mp3进行排序。
这是我到目前为止所得到的:
public static void main(String args[]) throws IOException {
ArrayList<Song> songs = new ArrayList<Song>();
//Defines the stdin stream
BufferedReader stdin = new BufferedReader (new InputStreamReader(System.in));
System.out.flush();
int k = new Scanner(System.in).nextInt();
}
所以,我希望你现在知道我想做什么。
这是我的疑问:我如何读取不同的值? (即将每首歌放入我的ArrayList中的详细信息。)
答案 0 :(得分:0)
使用BufferedReader
换行FileReader
逐行读取文件。
对于每首歌曲行,使用String.indexOf
查找从第二行读取的分隔符char的索引,并使用String.substring
将该行的每个部分作为单独的字符串。
使用Integer.parseInt
将最后一个字符串转换为整数。
定义一个Song
类,其中包含有关歌曲的三个信息:标题,作者和时间。对于每个歌曲行,构建一个Song
的新实例,并将该实例放在List<Song>
中。
使用比较器调用Collections.sort以对歌曲进行排序。有关排序的信息,请阅读http://download.oracle.com/javase/tutorial/collections/interfaces/order.html。
有关所有这些类和方法的文档,请访问:http://download.oracle.com/javase/6/docs/api/
答案 1 :(得分:0)
通常假设分隔符和字段数已知,您不会将它们放在文件中。我会做类似的事情。
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int numOfFields = Integer.parseInt(br.readLine());
Pattern sep = Pattern.compile(br.readLine(), Pattern.LITERAL);
String line;
List<Song> songs = new ArrayList<Song>();
while((line = br.readLine()) != null) {
String[] fields = sep.split(line, numOfFields);
songs.add(new Song(fields[0], fields[1], fields[2]);
}
Collections.sort(songs);
免责声明:如果这是作业,你必须以你的方式展示,而不仅仅是有效。