如果我有这样的文件,其中每个部分用“**”分隔。如何阅读每个部分并将它们放入不同的数据结构中?
AAA
BBB
CCC
**
ccc:cc
ddd:dd
**
xyz;XYZ
abc;ABC
**
Name: John
Email: john@gmail.com
Name: Jack
Email: jack@gmail.com
Name: kate
Email: kake@hotmail.com
**
在while循环中,我可以测试该行是否等于“**”。但由于每个部分的行数未知,似乎很难识别特定行属于哪个部分?
String line;
while((line=reader.readline()) != null){
if(!line.equals("**"){
// the line has to be parsed and built into different data structures.
For the first section, AAA,BBB,CCC will be added into an ArrayList.
}
}
答案 0 :(得分:1)
IMO你应该让阅读方法更聪明一点。
这是一个示例(一种伪代码,假设您有一个能够执行实际IO的读取器):
void main() {
List<List<String>> sections = ...
while(reader.hasMoreDataToProcess()) {
sections.add(processSection(reader));
}
}
List<String> processSection(reader) {
List<String> section = ...
do {
String line = reader.readLine();
if(line.equals("**")) { // end of section or whatever delimiter you have
return section;
}
section.addLine(line);
}while(true);
}
答案 1 :(得分:0)
抱歉,匆忙,所以伪代码:
currentSection = []
sections = [currentSection]
for each line:
if line is the separator:
currentSection = []
add currentSection to sections
else:
add line to currentSection
答案 2 :(得分:0)
您可以在Java中使用字符串类的split方法。
String string = "a-b,b-d,c-s,d-w,e-e,f-e";
String[] parts = string.split(",");
String part1 = parts[0]; // a-b
String part2 = parts[1]; // b-d
答案 3 :(得分:0)
您应该在此方案中使用扫描仪。这是你怎么做的。此代码未经过测试。
File file = new File("somefile.txt");
try {
Scanner sc = new Scanner(file);
sc.useDelimeter("\\*\\*");
while (sc.hasNext()) {
String s = sc.next();
}
sc.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
答案 4 :(得分:0)
您可以使用Scanner
和FileInputStream
来扫描文件,使用setDelimiter(String)
(接受正则表达式模式)来设置分隔符。
public class Test {
public static void main(String[] args) {
ArrayList<String> firstList = new ArrayList<>();
ArrayList<String> secondList = new ArrayList<>();
try(Scanner scanner = new Scanner(new FileInputStream(new File("yourFile.txt"))).useDelimiter("[*]+")) {
firstList.add(scanner.next());
secondList.add(scanner.next());
// and so on
scanner.close();
} catch(FileNotFoundException e) {
e.printStackTrace();
}
}
}
这会占用**
以上的所有内容,并从中创建一个字符串。如果需要,可以拆分String,并从每一行中获取数据。
String[] split = scanner.next().split("\n");
for(String string : split) {
firstList.add(string);
}
在第一个示例中,正则表达式[*]+
搜索多个*
。了解有关正则表达式(正则表达式)的更多信息,以增加灵活性。