java - 在txt文件中查找特定文本并将其存储在String中

标签 java

首先我想说我是初学者,这是我的第一个 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/

相关文章:

java - fragment 刷新?

java - 文件名的正则表达式

java - Chronometer 为空,即使父类初始化了它

java - 是否有可能为特定的 JVM 实例获得真正唯一的 ID?

java - 为什么 Stack 在 JDK 中扩展了 Vector?

java - Android 连接 MySQL 数据库失败

java - 使用 Java 管理 API 调用 [Android]

Java RMI 对来自客户端本身的客户端变量和来自服务器的远程调用的客户端变量有不同的实例化

java - 创建的可执行 jar 文件未执行

java - ElasticSearch 2.2.0 - ESIntegTestCase - 在搜索中执行 groovy 脚本时出现 ClassNotFoundException