UPDATECo to jest równoważne C# regex Java appendReplacement i appendTail
Oto co wymyśliłem. Nie testowałem jeszcze tego, ponieważ jest częścią znacznie większego fragmentu kodu, który wciąż wymaga przeniesienia.
Czy widzisz coś, co wygląda na nie na miejscu?
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();
oryginalny post poniżej:
Oto oryginalna 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();
A mój C# konwersji dotychczas
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();
Patrz komentarz powyżej, gdzie pytam: "CO ROBIĘ TUTAJ?"
Wyjaśnienie
kod Java powyżej dokonywaniu wymiany strun na niektóre HTML. Zapisuje pierwotnie zamieniony tekst, ponieważ musi zostać ponownie wstawiony później po zakończeniu kompresji białych znaków.
Więc w czym problem? – erickson
Czy możesz lepiej zdefiniować problem, na przykład jaki jest oczekiwany wynik i jaki jest wynik, jaki otrzymujesz? – CodingGorilla
Zgaduję, że są to części oznaczone "// CO ROBIĘ TUTAJ?" – jrummell