2011-12-20 29 views
1

我正在编写一个存储书籍,期刊,网站等的引用的应用程序。我的意思是我已经做得最多。Java:ArrayList,字符串操作和解析

我想要的是关于什么是实现上述规格的最佳方式的建议?

我应该使用什么格式的文本文件来存储库?不是文件类型,而是格式。我正在使用简单的文本文件。但是计划如下执行格式。

<book><Art of Human Hacking><New York><2011><1> 
<journal><Achieving Maximum Speed In 802.11n><London><2009><260-265> 

第一标签<book><journal>是类型标识符。我用过ArrayList。我应该使用多维ArrayList并存储下面的每个项目?

[[Art of Human Hacking,New York,2011,1][Achieving Maximum Speed In 802.11n,London,2009,260-265]] 

我用StringTokenizer,我不能区分空间。我该如何解决?

我已经实现了所有功能,包括列出所有功能,列出唯一的,搜索,编辑,删除,添加。但是一切都是在没有空格的情况下完成的

+0

我真的很喜欢JSON。 Java中肯定会存在用于JSON的现有解析器。它比xml更短,分析速度更快。 – 2011-12-20 18:59:43

回答

1

您应该使用现有的序列化程序,而不要编写自己的序列化程序,除非项目禁止它。

为了兼容和可读性,CSV将是您最好的选择。使用现有的CSV解析器让你的转义正确(不是很难写出自己,但很难保证使用现有的解析器来避免错误)。 Google出现了:http://sourceforge.net/projects/javacsv/

如果人工编辑不是优先级,那么JSON也是一种很好的格式(它是人类可读的,但不像CSV那么简单,并且不会像在Excel中那样显示)。

然后你有二进制协议,如原生Java序列化,甚至谷歌协议缓冲区。这些可能会更快,但显然会失去查看数据存储的能力,并可能会使调试复杂化。

+0

非常感谢你,将使用串行器和CSV一起使文本操作变得简单吗?因为我需要做操作,所以你可以给我提供任何链接到串行器与数组列表一起使用以便操作文本文件的例子。 – Milan 2011-12-20 19:14:04

+0

我正在使用序列化程序作为将对象转换为可写格式的通用术语。如果使用我链接的CSV库,那么从我所知道的情况来看,您将创建一个CSVReader对象(传入文件名作为参数),然后调用readRecord()以推进行,并使用不同的get()方法获取不同列的值(如果设置了标题名称,那么也可以通过标题名称获取)。例如:while(csv.readRecord()){myArray.add(csv.get(0)); }将第一列中的每个条目添加到数组(通常会创建一个包含每个col的子对象)。 – 2011-12-20 19:43:34