簡體   English   中英

純文本文件中的數據結構解析

[英]Parsing of data structure in a plain text file

您將如何在Java中解析類似於此的結構

\\Header (name)\\\
1JohnRide  2MarySwanson
 1 password1
 2 password2
\\\1 block of data name\\\
  1.ABCD
  2.FEGH
  3.ZEY
\\\2-nd block of data name\\\
1. 123232aDDF dkfjd ksksd
2. dfdfsf dkfjd
....
etc

假設它來自文本緩沖區(純文件)。

每行文字都是“ \\ n”-受限制。 單詞之間使用空格。

該結構或多或少地被定義。 但是,有時不確定性可能是,每行信息中的字段數可能不同,有時可能沒有數據塊,並且每塊中的行數也可能有所不同。

問題是如何最有效地做到這一點?

我想到的第一個解決方案是使用正則表達式。

但是還有其他解決方案嗎? 問題導向? 也許已經編寫了一些Java庫?

因為沒有人推薦任何庫,所以我的建議是:使用REGEX。

查看UTAH: https//github.com/sonalake/utah-parser

這個工具非常擅長解析這種半結構化文本

如果字段是固定長度的,則可以使用DataInputStream讀取文件。 或者,由於您的格式是基於行的,因此您可以使用BufferedReader讀取行並為自己編寫一個狀態機,該狀態機知道已經知道的下一行內容。 一旦將每一行都作為字符串,則只需要適當地分割數據即可。

例如,可以從您的密碼行中獲取密碼,如下所示:

final int pos = line.indexOf(' ');
String passwd = line.substring(pos+1, line.length());

從您發布的內容來看,數據似乎由空格分隔。 一種想法是使用ScannerStringTokenizer獲取一個令牌。 然后,您可以檢查令牌的第一個char ,以查看它是否為數字(在這種情況下,數字后的令牌部分將是數據,如果有的話)。

這聽起來像是一個作業問題,所以我將嘗試以一種有助於指導您的方式來回答它(而不提供最終的解決方案)。

首先,您需要考慮要讀取的每個數據對象。 是數字,然后是文本字段? 然后是3個文本字段? 可變數字和文本字段?

之后,您需要確定將用於分隔每個字段和每個對象的內容。 例如,在許多文件中,您會在字段之間看到一個分號,並在對象的結尾換行。 從你所說的看來,你的與眾不同。

如果一個對象可以跨越多條線,則需要牢記這一點(不要在對象中間停下來)。

希望有幫助。 如果您對此進行了研究,但在發布到目前為止的代碼和一些示例數據時仍然遇到問題,我將幫助您解決問題(我會教您釣魚....不要給您釣魚:-))。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM