请原谅我,我对Java相对较新。
基本上我想通过文件追踪器选择文件后,为文本文件获取一些字符串供以后使用。
这是我到目前为止编写的代码片段。
public void actionPerformed(ActionEvent e){
if(e.getSource() == openButton){
returnVal = fileChooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION){
file = fileChooser.getSelectedFile();
//read file
try{
br = new BufferedReader(new FileReader(file));
while((currentLine = br.readLine()) != null){
if(currentLine.startsWith(organismId)){
// if(Character.isDigit(currentLine.charAt(7))){
System.out.println(currentLine);
}}
} catch (Exception error){
error.printStackTrace();
}
}
}
}
基本上我有一个变量(organismId),它由用户通过GUI输入确定。从这里我可以打印出以所选String变量开头的行。然而,这并不是我想要实现的目标。我希望能够收集下一行中出现的文字,直到一个角色">"到达了。
然后我希望能够获得每个不同的organismId的文本的平均字符长度(即> ggo和> hba)。
即。文本文件的外观示例如下:
> GGO
这是一个例句
> GGO
这是另一个例句
> GGO
这是一个非常长的例句,可以进入多行,如此处所示
> HBA
这是一个有不同生物的句子
我希望所有这些都是有道理的,任何帮助都会受到高度赞赏。
非常感谢! :)
答案 0 :(得分:2)
此代码段应该是您问题的解决方案。 printLines
用于在找到您的生物后开始打印行。 while循环继续循环,如果找不到另一个生物,则打印该行。但是当达到一个新的有机体时(我相信>
表示),然后printLines
被设置回false
。
ArrayList<String> organisms = new ArrayList<String>();
boolean printLines = false;
StringBuilder organism = new StringBuilder();
while((currentLine = br.readLine()) != null) {
if (printLines) {
if (currentLine.startsWith(">")) {
// We have reached the next organism, so stop printing
printLines = false;
// Add the current organism to our collection
organisms.add(organism.toString());
// Clear the StringBuilder, ready for the next organism
organism.setLength(0)
}
else
{
// We are still printing the current organism
organism.append(currentLine);
}
}
if(currentLine.startsWith(organismId)) {
// Print this line, and start printing all lines after this
organism.append(currentLine);
printLines = true;
}
}
如果您有任何疑问或意见,请在下面告诉我们。
编辑根据评论中的要求,我们进行了修改,以便将值添加到ArrayList
。