首先我想说我是初学者,这是我的第一个 Java 程序。我想制作一个程序来读取文本文件、查找特定行并将其保存到我的字符串变量中。
所以我想找到以“Dealt to”开头的行,然后在该行中复制之后的所有内容,直到这个字符“[”并将其放入我的字符串变量中。
假设我的文本文件中有这一行: 处理我的昵称[文本] 我想要一个程序来查找文本“我的昵称”并将其放入我的字符串变量中。
我正在尝试使用类并尝试使用 setter 和 getter 只是为了练习,请让我知道我的代码是什么样子以及我如何改进它并使其工作。
这是 Main.java:
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException{
HandHistory hh1 = new HandHistory();
String hero1 = null;
hero1 = hh1.getHero();
System.out.println(hero1);
}
}
我的 HandHistory.java:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class HandHistory {
private String hero;
public HandHistory(){}
public String getHero() throws IOException {
FileReader in = new FileReader("G:/Java/workspace/HandHistory/src/File.txt");
BufferedReader br = new BufferedReader(in);
String line;
while ((line = br.readLine()) != null) {
if (line.contains("Dealt to ")){
hero = line.substring(9,(line.indexOf("["))-1);
}
}
return hero;
}
public void setHero(String hero){
this.hero = hero;
}
}
最佳答案
这是一个好的开始,是逐行读取文件的好方法。一个值得解决的问题是通过使用 try-finally block 关闭 FileReader 资源,或者从 Java 7 开始使用新的 try-with-resources block :
try (FileReader in = new FileReader("G:/Java/workspace/HandHistory/src/File.txt")) {
...
}
我能想到的其他提示和评论:
- 如果您实际上不需要,则不必在您的类(class)中设置二传手
- 如果有行包含字符串“Dealt to”但不以该字符串开头,您的代码将不起作用。例如。 “Foobar Dealt to My NickName [text]”仍会匹配,但会返回错误值
- 如果您真的只想匹配以“Dealt to”开头的行,请使用 String.startsWith() 而不是 String.contains()
- 您应该处理字符串中没有“[”的情况,否则您的代码会因难以理解的错误而崩溃
- 如果正则表达式可以消除代码的复杂性,那么它们就很有用。在你的情况下,问题可以通过使用 startsWith 和 indexOf 相对容易地解决,所以在这种情况下我不会使用 RegExps
- 如果不查看实际代码,HandHistory.getHero() 的作用并不明显。为表达类或方法实际作用的事物指定名称总是非常有帮助的。
- 可以说 getHero() 方法做了太多事情,HandHistory 类也是如此,但在将代码用于比学习 hello-world 示例更大的事情时,这可能是需要考虑的事情。
关于java - 在txt文件中查找特定文本并将其存储在String中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37244105/