Похоже, что вы могли бы сопоставить с регулярным выражением.Я не знаю Java, но у вас должен быть хотя бы один движок регулярных выражений.Тогда регулярное выражение будет:
регулярное выражение1: & (\ d +) и регулярное выражение2: & (\ w +)
или
регулярное выражение 3: & (\ d + | \ w +)
В первом случае, если регулярное выражение соответствует, вы знаете, что столкнулись с числом, и это число входит в первую группу захвата (например, match.group (1)).Если regex2 соответствует, вы знаете, у вас есть слово.Затем вы можете найти это слово в словаре и посмотреть, что это за связанный номер, или, если его нет, добавить его в словарь и связать со следующим свободным номером (16 + размер словаря + 1).
regex3, с другой стороны, будет совпадать как с числами, так и со словами, так что вам решать, что находится в группе захвата (это просто другой подход).
Если ни один из регулярных выражений не совпадает, значит, у вас неверныйпоследовательность, или вам нужно какое-то другое действие.Обратите внимание, что \ w в регулярном выражении соответствует только символам слова (т. Е. Буквам, _ и, возможно, нескольким другим символам), поэтому & çSomeWord или & * SomeWord не будут совпадать вообще, тогда как захваченная группа в & Hello.World будет просто "Здравствуйте ".
Библиотеки Regex обычно предоставляют длину для сопоставленного текста, так что вы можете переместиться на столько вперед, чтобы пропустить уже сопоставленный текст.