2013-08-20 36 views
1

如何將txt文件中特定行的子字符串(十六進制數字)從未知分配給變量?將特定行上的數字分配給變量

我已經寫了代碼來識別必要的行,並且我被告知要使用正則表達式(正則表達式)。

我不知道該怎麼做。它可以沒有正則表達式嗎?

這是一個示例txt文件的摘錄。我希望得到(然後比較值(2)值(3)),但我需要的十六進制數第一。

Default(2) = 0x00 
Value(2) = 0xE0A64F36 
Desc(2) = calculated from application 
Address(2) = 0x60 
Page(2) = Sensor 
Name(3) = ROM CRC32 
Type(3) = u32 
Default(3) = 0x00 
Value(3) = 0xE0A64F36 
Desc(3) = fix CRC from ROM 
+2

當'Java'被標記時,不需要編寫[Java]。 – Maroun

+0

爲什麼你強調'未知'? – 2013-08-20 11:51:54

+0

因爲此代碼將用於使用此佈局打開多個文件。我將不得不通過每個文件,檢查編號並將其放置在代碼中。 –

回答

3

拆分=並解析十六進制數字。

String s = "Value(2) = 0xE0A64F36"; 
String hex = s.split("=")[1].trim(); 
long l = Long.parseLong(hex.substring(2), 16); 
// l == 3768995638 
+0

對不起。我花了一段時間才能通過這些答案。 –

1

你可以這樣做的提取:

Pattern p = Pattern.compile("Value\\([23]\\) = (0x([0-9A-F]{8}))"); 
Matcher m = p.matcher(s); 
while (m.find()) { 
    System.out.println(m.group(1)); 
    System.out.println(Long.parseLong(m.group(2), 16)); 
} 

注意:如果你只想要測試是否值(2)和值(3)是相同的,你不需要任何轉換。你只能比較字符串。

1

,如果你不想使用正則表達式,你必須自己解析由HEX模式字符串,如讓行的值部分(字符串後「=」),並檢查是否這部分是十六進制格式(從0x開始,後面的字符是0-F)或者使用Integer.parseInt(String s,int radix)試圖解析它(捕獲異常)

1

假設你有字符串已經提取並且它們存儲在2個變量中,

String value2 = "Value(2) = 0xE0A64F36"; 
String value3 = "Value(3) = 0xE0A64F36"; 

你可以我們e子串和indexOf得到實際值:

value2 = value2.substring(value2.indexOf("0x")); 
value3 = value3.substring(value3.indexOf("0x")); 
if (value2.compareToIgnoreCase(value3) == 0) { 
    // Do something here 
} 
相關問題