这非常复杂。我正在构建一个将使用文本文件的GUI,当我按下“开始”按钮时,它将启动“ BufferReader”功能,以将文件中的所有行读取到名为“列表”的ArrayList中。之后,我需要从以字母“ CE-”开头的数组“ list”中捕获所有字符串,然后使用数组“ list”的下一个索引,直到代码再次获取以“ CE-”开头的字符串字母。 “ CE-”之间的所有字符串都需要添加到名为“ CE”的新ArrayList中。
这是文本文件的一小部分:
CE-system-components-accessmanager:
Access control enable ,disabled
Access policy prototyping ,enabled
Access user group ,enabled
Implicit roles access policy ,disabled
World access policy ,disabled
CE-system-components-eqlog:
EquipmentLog Enable ,false
CE-system-components-eventlog:
Eventlog Enable ,false
这是代码的一部分,需要在“ CE-”之间的索引中获取字符串:
for(String s : list) {
if(s.contains("CE-")){
int idx = (list.indexOf(s))+1;
String txt = list.get(idx);
System.out.println(txt);
CE.add(txt);
}
}
System.out.println(CE);
这段代码中我的输出只是第一个参数。
Access control enable ,disabled
EquipmentLog Enable ,false
Eventlog Enable ,false
我的问题是如何获取所有参数?我已经尝试了一些代码,但是无法正常工作。
答案 0 :(得分:1)
此代码使用布尔值inCE
来跟踪CE块中的行。看到“ CE-”行时设置为true,看到空白行时设置为false。
boolean inCE = false;
for (String line : lines) {
if (line.contains("CE-")) {
inCE = true;
}
else if (line.trim().isEmpty()) {
inCE = false;
}
else if (inCE) {
System.out.println(line);
CE.add(line);
}
}
答案 1 :(得分:0)
您可以先创建一个函数来检查一个以另一个字符串开头的字符串。
startsWith (start, string) {
for (let i = 0; i < start.length; i++)
if (start[i] !== string[i])
return false
return true
}
对每一行都执行此操作,当您到达“ CE-”行时,开始向数组中添加行。 您还需要知道哪个char元素出现在参数的开头。对我来说,它看起来像一个标签'\ t'。
addLines (strArray) {
let start = "CE-"
let paramStart = '\t'
let resultArr = []
let addMode = false
for (let i = 0; i < strArray.length; i++) {
if (addMode) {
if (paramStart === strArray[i][0]) // Check if its a Param line
resultArr.push(strArray[i])
else
addMode = false //Means that you found a new Title, but you still
dont know
// if it is a "CE-"
}
if(!addMode) // Prevent that you check for Titles when adding param
if (startsWith(start, strArray[i]))
addMode = true
}
return resultArr
}
if(addMode)
和if(!addMode)
可能看起来很糟糕,但是您仍然需要它们。添加参数时,您不知道何时出现下一个标题,因此您仍然需要在同一交互中检查该行。这就是为什么它不是if else
语句
我想是这样。我没有测试它,但是即使它不是完美的,我想它也可以为您指明正确的方向。抱歉,我使用 JavaScript 进行了所有操作,但您明白了。 :P