UPDATEЧто такое C# Regex эквивалент в Java appendReplacement и appendTail
Вот что я придумал. Я еще не тестировал его, потому что он является частью гораздо большего фрагмента кода, который по-прежнему нужно портировать.
Вы не видите ничего, что выглядит неуместным?
private const string tempUserBlock = "%%%COMPRESS~USER{0}~{1}%%%";
string html = "some html";
int p = 0;
var userBlock = new ArrayList();
MatchCollection matcher = preservePatterns[p].Matches(html);
int index = 0;
StringBuilder sb = new StringBuilder();
int lastValue = 0;
foreach(Match match in matcher){
string matchValue = match.Groups[0].Value;
if(matchValue.Trim().Length > 0) {
userBlock.Add(matchValue);
int curIndex = lastValue + match.Index;
sb.Append(html.Substring(lastValue, curIndex));
sb.AppendFormat(tempUserBlock, p, index++);
lastValue = curIndex + match.Length;
}
}
sb.Append(html.Substring(lastValue));
html = sb.ToString();
ОРИГИНАЛЬНЫЙ ПОСТ НИЖЕ:
Вот оригинал Java:
private static final String tempUserBlock = "%%%COMPRESS~USER{0}~{1}%%%";
String html = "some html";
int p = 0;
List<String> userBlock = new ArrayList<String>();
Matcher matcher = patternToMatch.matcher(html);
int index = 0;
StringBuffer sb = new StringBuffer();
while (matcher.find())
{
if (matcher.group(0).trim().length() > 0)
{
userBlock.add(matcher.group(0));
matcher.appendReplacement(sb, MessageFormat.format(tempUserBlock, p, index++));
}
}
matcher.appendTail(sb);
html = sb.toString();
И мой C# преобразования до сих пор
private const string tempUserBlock = "%%%COMPRESS~USER{0}~{1}%%%";
string html = "some html";
int p = 0;
var userBlock = new ArrayList();
MatchCollection matcher = preservePattern.Matches(html);
int index = 0;
StringBuilder sb = new StringBuilder();
for(var i = 0; i < matcher.Count; ++i){
string match = matcher[i].Groups[0].Value;
if(match.Trim().Length > 0) {
userBlock.Add(match);
// WHAT DO I DO HERE?
sb.Append(string.Format(tempUserBlock, p, index++));
}
}
// WHAT DO I DO HERE?
matcher.appendTail(sb);
html = sb.toString();
См. Комментарий выше, где я спрашиваю: «ЧТО ДЕЛАТЬ ЗДЕСЬ?»
Разъяснение
Java-код выше выполняет замену строки на некотором HTML. Он сохраняет первоначально замененный текст, потому что его необходимо повторно вставить позже после завершения некоторого сжатия пробела.
Так в чем проблема? – erickson
Можете ли вы лучше определить проблему, например, каков ожидаемый результат и какой результат вы получаете? – CodingGorilla
Я предполагаю, что его части обозначены буквой '// ЧТО Я ДЕЛАТЬ ЗДЕСЬ?' – jrummell