Java 如何存储文本文件字符串供以后使用
How to store strings of text files for later use in Java
请原谅我,我对 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
这是一个不同organismId的句子
我希望所有这些都有意义,我们将不胜感激。
非常感谢! :)
这段代码应该可以解决您的问题。 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
。
请原谅我,我对 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
这是一个不同organismId的句子
我希望所有这些都有意义,我们将不胜感激。
非常感谢! :)
这段代码应该可以解决您的问题。 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
。