java - 从文件中读取特定单词

标签 java hashmap filereader

所以我有一个动物园数据库,游客可以在这里看到不同种类的动物。每个游客都有自己的日志,记录他看到的动物和时间。我正在尝试创建访客看到的所有动物的列表,并分离出访客的唯一 ID。如果访客在不同的日子看到同一种动物,则将看到该动物的次数映射到动物名称。我只需要列表中的动物名称和用于其他处理目的的客户 ID。日期并不重要。这就是示例日志的样子。

ClientId: 1001
Zebra 10/1
Cheetah 10/2
Tiger 10/2
Lion 10/3
Zebra 10/4

这是我的日志类:

public class Log {

    private int clientId;
    private int animalCount = 1;

    private Map<String, Integer> animalList = new HashMap<String, Integer>();

    public void addFromFile(String fileName) {
        File file = new File(fileName);
        Scanner sc = null;
        try {
            sc = new Scanner(file);
        } catch (FileNotFoundException e) {
            System.out.println("File Not Found.");
        }
        while (sc.hasNextLine()) {
            sc = new Scanner(sc.nextLine());
                String s = sc.next();

                 //Don't add the dates. Only the Strings

                if (!isNumeric(s)) {
                    if (animalList.containsKey(s)) {
                        animalList.put(s, animalList.get(s) + 1);
                    } else {
                        animalList.put(s, animalCount);
                    }
                }
            }

        }

    public Map<String, Integer> getList() {
        return animalList;
    }

    public int getClientId() {
        return this.clientId;
    }

    public int itemCount() {
        return this.itemCount;
    }

    public boolean isNumeric(String str) {
        return Character.isDigit(str.charAt(0));
    }
}

日志将始终按该顺序出现。我在先处理客户端 ID 行,然后再进行动物名称处理时遇到了麻烦。

使用上面示例日志的以下输出是:

Log log = new Log();
log.addFromFile("DataSetOne1.txt");
System.out.println(log.getList());
    //Output: {ClientId:=1}

我的代码总是卡在第一行。我希望能够处理第一行并首先将其移开,因为它包含我关心的唯一整数值​​。我只是对如何处理这个问题感到困惑。

最佳答案

如果每个条目都在单独的行上,则循环遍历字符,直到在每行上找到 digits (数字)或 : 字符,并将字符存储在二维数组或列表中的数组。

如果在一行中找到的字符是 :,则丢弃该行之前获取的字符,并使用 String.trim 记录这些字符直到该行末尾(),应该会为您提供访问者的 ID。

否则,如果找到数字,则停止记录字符,并跳出该行的循环,并且在 .trim() 之后,您应该得到动物的名称.

<小时/>

PS:正则表达式或模式匹配器更难理解(正如您在OP的评论中指出的那样),但会使这变得更容易。如果您想使用字符串或文件解析,您应该真的,真的真的真的学习这些东西.

关于java - 从文件中读取特定单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33848819/

相关文章:

java - 致命异常 : main in a program to search for pdf files in sd card

java - CRUD.save() 带有来自数据库的时间戳

android 的 SparseIntArray 会自动自动装箱键

java - FileReader 找不到我的文本文件

java - 将时区存储为 ID 字符串或与 UTC 的偏移量?

hashmap - 如何将 HashMap 传递给 Rust 中的函数

java - 多线程环境下的 HashMap 和哈希表

java文件阅读器奇怪的输出

java - 如何读取文本文件中字符串数据的特定位置

java - 如何输出一个新数组,其中包含前一个数组中最多出现 k 次的所有数字