Я сейчас беру строку, которая делится
20004=1~^20005=0~^773=~^665=~^453=3~^448=0A~!447=D~!452=1~!~^448=0A~!447=D~!452=17~!~^448=81~!447=D~!452=7~!~^11=1116744Pq2Q~^70=15040024-1~^793=MNL-?--1~^467=37878024-1~^60=20110617-05:57:31~^75=20110616~^768=1~^769=20110616-19:17:00~!770=1~!~^55=7800950~^48=AEP~^22=~^454=0~^460=5~^167=TCKR~^
Структура строки такова, что ~ ^ разделяет атрибуты и ~! отмечает группы. Группам предшествует атрибут, который сообщает количество повторяющихся групп, например
453=3~^448=0A~!447=D~!452=1~!~^448=0A~!447=D~!452=17~!~^448=81~!447=D~!452=7~!~^
Где тег 453 обозначает, что есть 3 группы.
Я использовал такой синтаксический анализ:
public Map<Integer, Object> parse(Object target)
{
String[] elements = ((String) target).split(elementDilimiter);
Map<Integer, Object> targetFields = new LinkedHashMap<Integer, Object>();
for(int i=0; i<elements.length; i++)
{
String[] attributes = elements[i].split(attributeDelimiter);
if(attributes.length != 2 || attributes[0].length() == 0 || attributes[1].length() == 0)
{
/*throw new ParsingException("Malformed element: " + element + ", expected: tag=value");*/
continue;
}
targetFields.put(Integer.valueOf(attributes[0]), attributes[1]);
}
return targetFields;
}
Разделитель элемента = ~ ^ и разделитель атрибута = "="
Итак, после строки:
String[] elements = ((String) target).split(elementDilimiter);
Значения разделены следующим образом
453=3, 448=0A~!447=D~!452=1~!, 448=0A~!447=D~!452=17~!, 448=81~!447=D~!452=7~!,
Затем они делятся на равные и помещаются в карту с помощью tagNo для возврата соответствующего объекта.
Однако когда группы добираются до:
String[] attributes = element.split(attributeDelimiter);
Группы больше не идут из-за:
attributes.length != 2
Но в идеале я бы хотел, чтобы моя реализация могла захватить тег 453, понимая, что есть 3 повторяющиеся группы, повторяющиеся группы переходят в синтаксический анализатор, который разделит их на ~! и размещены на дополнительной карте.
Теперь я буду честен, когда думаю о реализации, моя голова начинает кружиться.
Есть ли простое решение eligant вокруг этого или это базовое начало с нуля.
EDIT
Определяется ли 453 как всегда идентификатор группы?
Да, тег перед группами просто говорит мне, сколько будет групп. У меня нет контроля над входящей строкой, или ее формат принимает форму, описанную выше.
Что представляют ваши группы - я спрашиваю об этом, потому что я думал бы, что атрибуты вместе как часть групп, но в вашем методе вы разделяете атрибуты, а не группы, и разделяете элементы перед атрибутами?
Я разделил элементы таким образом, чтобы их можно было разделить как 453 = 3 и т. Д. Однако, затем начался этот групповой бизнес. Так что теперь я должен переписать, чтобы приспособить их тоже. По сути, это моя проблема, прежде чем у меня были прекрасные значения тегов, которые сопоставлены с объектом и могут быть доступны просто через:
targetFields.get(TagNumber);
Теперь мне нужно будет переписать, чтобы обеспечить доступ к группам!
Надеюсь, это немного прояснилось