2011-12-20 30 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