Java 我如何使用“:”:&引用;作为分隔符与其他分隔符
我正在尝试解析一个dat文件,我正在用Java进行拆分。我想我遗漏了一些基本的东西,但我不知道是什么,下面是我的两个类和我的测试文件。我可以通过使用括号和管道让它使用所有的分隔符,但我希望它将::处理在一起,这样当它遍历文本时,它将::作为一个分隔符处理。现在它把它当作两个例子:在我的结果中给我一个空格 Driver.javaJava 我如何使用“:”:&引用;作为分隔符与其他分隔符,java,Java,我正在尝试解析一个dat文件,我正在用Java进行拆分。我想我遗漏了一些基本的东西,但我不知道是什么,下面是我的两个类和我的测试文件。我可以通过使用括号和管道让它使用所有的分隔符,但我希望它将::处理在一起,这样当它遍历文本时,它将::作为一个分隔符处理。现在它把它当作两个例子:在我的结果中给我一个空格 Driver.java import java.io.File; import java.io.IOException; import java.util.Scanner; import jav
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
public class Driver
{
public static void main(String[] args) throws IOException {
List<MovieInfo> mData = new ArrayList<>();
File rData = new File("test.dat");
Scanner scanner = new Scanner(rData);
while (scanner.hasNext())
{
String[] data = scanner.nextLine().split("[::|(|)]"); //this is where my issue is
String tempId = data[0];
String tempName = data[1];
String tempYear = data[2];
String tempGenres = data[3];
MovieInfo tempMInfo = new MovieInfo(tempId, tempName, tempYear, tempGenres);
mData.add(tempMInfo);
}
for (MovieInfo each:mData)
System.out.println(each);
System.out.println("done");
}
}
test.dat
1::Toy Story (1995)::Animation|Children's|Comedy
2::Jumanji (1995)::Adventure|Children's|Fantasy
3::Grumpier Old Men (1995)::Comedy|Romance
4::Waiting to Exhale (1995)::Comedy|Drama
5::Father of the Bride Part II (1995)::Comedy
6::Heat (1995)::Action|Crime|Thriller
7::Sabrina (1995)::Comedy|Romance
8::Tom and Huck (1995)::Adventure|Children's
9::Sudden Death (1995)::Action
10::GoldenEye (1995)::Action|Adventure|Thriller
输出
ID #: 1
Name:
Year: Toy Story
Genres: 1995
ID #: 2
Name:
Year: Jumanji
Genres: 1995
ID #: 3
Name:
Year: Grumpier Old Men
Genres: 1995
ID #: 4
Name:
Year: Waiting to Exhale
Genres: 1995
ID #: 5
Name:
Year: Father of the Bride Part II
Genres: 1995
ID #: 6
Name:
Year: Heat
Genres: 1995
ID #: 7
Name:
Year: Sabrina
Genres: 1995
ID #: 8
Name:
Year: Tom and Huck
Genres: 1995
ID #: 9
Name:
Year: Sudden Death
Genres: 1995
ID #: 10
Name:
Year: GoldenEye
Genres: 1995
done
正如您从我的输出中看到的,它将名称留空,并向下移动其余结果。它在您的版本中忽略双冒号的原因是您正在使用括号创建字符类。忽略字符类中的重复字符。您的正则表达式还将导致它将
(
和)
视为分隔符,因为它们也包含在类中
实际上,您似乎希望在双冒号的所有引用处和管道的所有引用处拆分字符串。将其作为一个简单的正则表达式编写,可以得到split(“::\ \ \ \ \ \”)
- 双冒号(
)或(:
)管道(|
)\\\\\\\
- 由于管道是正则表达式中的保留字符,当您不希望它表示“或”时,必须转义此字符
- 要在Java正则表达式中转义,请使用双反斜杠
ID #: 1
Name:
Year: Toy Story
Genres: 1995
ID #: 2
Name:
Year: Jumanji
Genres: 1995
ID #: 3
Name:
Year: Grumpier Old Men
Genres: 1995
ID #: 4
Name:
Year: Waiting to Exhale
Genres: 1995
ID #: 5
Name:
Year: Father of the Bride Part II
Genres: 1995
ID #: 6
Name:
Year: Heat
Genres: 1995
ID #: 7
Name:
Year: Sabrina
Genres: 1995
ID #: 8
Name:
Year: Tom and Huck
Genres: 1995
ID #: 9
Name:
Year: Sudden Death
Genres: 1995
ID #: 10
Name:
Year: GoldenEye
Genres: 1995
done