UPDATEWas ist der C# Regex entspricht Java appendReplacement und appendTail
Hier ist, was ich kam mit. Ich habe es noch nicht getestet, weil es Teil eines viel größeren Teils des Codes ist, der noch portiert werden muss.
Können Sie etwas sehen, das fehl am Platz erscheint?
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();
ORIGINAL POST UNTEN:
Hier ist die ursprüngliche 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();
Und meine C# Umwandlung bisher
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();
Siehe Kommentar oben, wo ich frage: "Was mache ich hier?"
Klärung
Der Java-Code oben auf einige HTML-String Ersatz ausführt. Er speichert den ursprünglich ersetzten Text, da er später erneut eingefügt werden muss, nachdem die Weißraumkomprimierung abgeschlossen ist.
Also, was ist das Problem? – erickson
Können Sie das Problem besser definieren, wie ist das erwartete Ergebnis und was ist das Ergebnis, das Sie erhalten? – CodingGorilla
Ich vermute es sind die Teile, die mit '// WAS MACHT ICH HIER?' – jrummell