【发布时间】:2013-09-25 20:05:42
【问题描述】:
以下是非常大文件的一小部分摘录。
我正在寻找一种将每个名称和值(在 Name(x) 和 Value(x) 行上)放入数组元素的方法或 List 类型,两者之间有一个“=”。
即让每个元素看起来像“'name' = 'value'”。
[Device|EEP_FEATUREKOI_HFS_Max|Kostia]
--------------------------------
Name(1) = partHeader_A01
Value(1) = 0x10
Desc(1) = (Address 0x000) Article No. / P.C.B No Byte 1
Name(2) = partHeader_A02
Value(2) = 0x9
Desc(2) = (Address 0x001) Article No. / P.C.B No Byte 2
Name(3) = partHeader_A03
Value(3) = 0x95
Desc(3) = (Address 0x002) Article No. / P.C.B No Byte 3
Name(4) = partHeader_A04
Value(4) = 0x38
Desc(4) = (Address 0x003) Article No. / P.C.B No Byte 4
----------------------------------
Name(12) = AdrIctPcbTestDate_Day
Value(12) = 0xFF
Desc(12) = (Address 0x00B) Test Date : Day
---------------------------------
Name(13) = AdrIctPcbTestDate_Month
Value(13) = 0xFF
Desc(13) = (Address 0x00C) Test Date : Month
---------------------------------
Name(14) = AdrIctPcbTestTime_Hour
Value(14) = 0xFF
Desc(14) = (Address 0x00D) Test Time : Hour
---------------------------------
Name(15) = AdrIctPcbTesTime_Minute
Value(15) = 0xFF
Desc(15) = (Address 0x00E) Test Time : Minute
到目前为止,我可以获得名称和值。我的问题是,当一个部分有超过 1 个字节时(在名称中用“_”表示),我需要将所有字节值放在同一个元素中,只有一个名称。
我想不出正确的算法来让它正常工作。
即对于 partHeaderArtLK_A01 到 partHeaderArtLK_A04,而不是有
partHeaderArtLK_A01 = 10
partHeaderArtLK_A02 = 09
partHeaderArtLK_A03 = 95
partHeaderArtLK_A04 = 38
元素应该看起来像
partHeaderArtLK = 10 09 95 38.
(注意:我插入了虚线分隔符以使事情更清楚。它们不(也不能)存在于实际文件中。)
这是我目前的尝试:
if (line.contains("Name")&& line.contains("_")) {
String basicName = line;
cutName = basicName.split("=")[1].trim();//get substring after '='
cutName = cutName.substring(0,cutName.lastIndexOf("_"));//removes '_'?
importantName.add(i, (cutName + " = "));//add to element i
System.out.println("Line reads: " + basicName);
System.out.println("Part: " + cutName);
do{
if (line.contains("Value")) {
Hex = line.split("=")[1].trim();//get substring after '='
importantNumber.add(i, Hex);//get substring after '='
System.out.println("Value: " + Hex);
}//end if
}while(!"Value".contains(line = reader.readLine()));
while (!placeToFinish[i].equals(line = reader.readLine()));
}else
if(line.contains("Name")) {
String basicName = line;
cutName = basicName.split("=")[1].trim();//get substring after '='
importantName.add(i, (cutName + " = "));//get substring after '='
System.out.println("Line reads: " + basicName);
System.out.println("Part: " + cutName);
System.out.println("Number: " + importantNumber.indexOf(i) + "\n");
do{
if (line.contains("Value")) {
Hex = line.split("=")[1].trim();//get substring after '='
importantNumber.add(i, Hex);//get substring after '='
}//end if
}while (!"Value".contains(line = reader.readLine()));
while (!placeToFinish[i].equals(line = reader.readLine()));
}//end if
这里是完整代码的链接:http://justpaste.it/d3u0
感谢所有算法或代码。
提前致谢!
【问题讨论】:
-
代码太多了,伙计!!请发布重要部分。
-
好的,会的。我会为任何需要它的人发布完整代码的链接。
-
@user2798632 您是否考虑过使用简单的状态机?那可能行得通。另一种方法是仅在您确认下一个名称不是前一个名称的延续后才最终确定前一个值。
-
@Eric Stein 我从未使用过状态机,对它们一无所知。我也考虑过你提到的方法,但我仍在努力弄清楚如何做到这一点:/
标签: java arrays algorithm list sorting