我有这样的数据
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
感谢您提前帮助。
答案 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
你需要注意两件事。 (这里我们假设我们正在阅读第一行)
拆分|。现在自|是一个必须用来逃避它的元字符。因此in.nextLine().split("\\|");
现在arr [0]将包含1,而arr [2]将包含玩具总动员(1995)。因此我们将arr [2]拆分为“(”。你需要第一次匹配,因此你可以把它写成arr[1].split("\\(")[0])
(你再次必须将其转义为“(”也是元字符)。
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);
}
你也可以通过其他方式修复