Извлечение повторяющихся атрибутов из одной непрерывной строки - PullRequest
2 голосов
/ 16 июня 2011

У меня есть строка с двумя типами разделителя.

String X = "20001=EDTS~^20002=USA~^20003=1170871875~^20004=1~^20005=0~^773=~^665=~^453=2~^448=0A~!447=D~!452=1~!~^448=0A~!447=D~!452=17~!~^11=001111652533408~^";

~^ обозначает одиночные значения

, где ~! обозначает группы значений.

448=0A~!447=D~!452=1~!~^448=0A~!447=D~!452=17~!~^

Ранее я работал над предположением, что нет повторяющихся групп данных, и просто сопоставлялся с картой, основываясь на том, что ключ равен номеру тега.Однако это не подходит для повторяющихся групп, поскольку они будут перезаписаны.

EDIT Я хочу взять значения из этой строки и сопоставить их с атрибутами различных объектов.в основном число слева относится к тегу, а значение - это просто значение.Таким образом, тег 20002 = США, мне нужно сопоставить значение USA с атрибутом в моем новом объекте.Недопустимые значения - это просто значения по умолчанию, поэтому они указывают, что они были назначены, но не получили значение

Теперь я немного ломаю голову над тем, чтобы придумать лучший способ сопоставления данных и групп,поддержание тега и значения, связанного с ним.

1 Ответ

0 голосов
/ 22 июня 2011

Eek ... плохой формат данных. JSON был бы намного красивее. URL-кодированные строки параметров тоже будут лучше. И то, и другое позволит учесть произвольное вложение групп.

Но, может быть, как-то так?

String groupDelim="~!";
String entryDelim="~^";
String pairDelim="=";

String[] groups = X.split(groupDelim);
int groupId = 0;
for(String group:groups){
   String entries = group.split(entryDelim);
   int entryId = 0;
   for(String entry:entries){
      String[] pair = entry.split(pairDelim);
      /* now do stuff with */
      groupId; // for sort order if it matters
      entryId; // for sort order if it matters
      String key = pair[0];
      String value = pair[1]; 
      entryId++;
   }
   groupId++;
}
...