gpt4 book ai didi

java - 用Java扫描文本文件

转载 作者:行者123 更新时间:2023-12-01 04:14:02 26 4
gpt4 key购买 nike

我有一个 US-ASCII 文本文件,其中包含一个长行。我需要访问的文本项由不同数量的空格分隔,如下所示:

metadata1 attrib1     metadata2 attrib2   attrib2a trackstart attrib1   attrib2   trackstart attrib1 atrib2 attrib3

该文件最多可以有 99 个“轨道”条目,并且占用的内存很少。

我需要做什么

我必须将这些条目提取到内存结构中,我可以对其进行迭代、访问值和对项目进行计数。例如,我需要获取“轨道”的数量(通过计算上面示例中的“trackstart”),并将每个轨道的属性添加到类似 object.track1.attribute1 的结构中。

我尝试过的

我使用扫描仪读取文件并逐步浏览文本条目。这似乎工作正常。然后我创建了嵌套的 HashMap,例如:

HashMap<String, String> overallMap = new HashMap<String, String>(); // contains the tracks map and some other metadata
HashMap<String, Map> tracks = new HashMap<String, Map>(); // contains a map of all tracks
HashMap<String, String> track = new HashMap<String, String>(); // contains an individual track

但问题是(我认为)HashMaps 不会让我计算键的数量(所以我无法获取文本文件中“轨道”的数量)。我怀疑我会遇到此数据结构的其他问题。

问题

  1. 在这种情况下,扫描程序是读取和操作文件的最佳方式吗?
  2. 我应该选择什么内存数据结构?如何构建轨道列表、对轨道进行计数并访问此结构中的各个属性?

最佳答案

由于您有一些元数据对象和一些轨道,其中每个对象都有可变数量的属性,因此我们可以有一个名为“MyObjects”的基类来表示它们中的每一个

public class MyObject implements java.io.Serializable
{
String name;
ArrayList attributes;
public MyObject(String name)
{
this.name = name;
}
public void addAttribute(String attr)
{
this.attributes.add(attr);
}
}

然后有一个 MyFile 类,它代表您读取的每个文件。

public class MyFile
{
MyObject[] metadata;
MyObject[] track;

public int check(String s)
{
if(s.substring(0,s.length()-1).equals("metadata")) return 0;
if(s.equals("trackstart")) return 1;
return 2;
}
}

然后在main函数中就可以读取文件了

File f = new File(filepath); 
BufferedReader br = new InputStreamReader(f.getInputStream());
String line = "",content = "";
while((line = br.readLine())!=null) content += line;

MyFile myfile = new MyFile();
StringTokenizer t = new StringTokenizer(content," ");
int status;
String word = "";
while(t.hasMoreTokens())
{
word = t.nextToken();
status = myfile.check(word);

// add the attributes to the to metadata or tracks

}

关于java - 用Java扫描文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19618106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com