Хорошо, ребята, мой мозг жарен.Я пытаюсь исправить некоторые EML с плохими границами, заменив неправильные
--Boundary_([ArbitraryName])
строки более правильными
--Boundary_([ArbitraryName])--
, оставляя уже правильные
--Boundary_([ThisOneWasFine])--
строк в одиночку.У меня есть целое сообщение в памяти в виде строки (да, это уродливо, но JavaMail умирает, если пытается их проанализировать), и я пытаюсь заменить все.Вот самое близкое, что я могу получить.
//Identifie bondary lines that do not end in --
String regex = "^--Boundary_\\([^\\)]*\\)$";
Pattern pattern = Pattern.compile(regex,
Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
Matcher matcher = pattern.matcher(targetString);
//Store all of our unique results.
HashSet<String> boundaries = new HashSet<String>();
while (matcher.find())
boundaries.add(s);
//Add "--" at the end of the Strings we found.
for (String boundary : boundaries)
targetString = targetString.replaceAll(Pattern.quote(boundary),
boundary + "--");
Здесь есть очевидная проблема замены всех действительных
--Boundary_([WasValid])--
строк на
--Boundary_([WasValid])----
Однако этоэто единственная установка, которую я получил, чтобы даже выполнить замену.Если я попытаюсь изменить Pattern.quote (border) на Pattern.quote (border) + "$", ничего не будет заменено.Если я попытаюсь использовать matcher.replaceAll ("$ 0--") вместо двух циклов, ничего не заменится.Какой элегантный способ достичь моей цели и почему он работает?