【发布时间】:2023-03-25 05:40:01
【问题描述】:
更新
这是我想出的。我还没有对其进行测试,因为它是仍然需要移植的更大代码段的一部分。
你能看到任何看起来不合适的地方吗?
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 上执行字符串替换。它保存了最初替换的文本,因为它需要稍后在完成一些空白压缩后重新插入。
【问题讨论】:
-
您能否更好地定义问题,例如,预期结果是什么以及您得到的结果是什么?
-
我猜是标有
// WHAT DO I DO HERE?的部分 -
你能发布完整的代码吗,当我们不知道 p 或 tempUserBlock 是什么时,很难帮助“我在这里做什么”下面的行(我认为这是问题) /跨度>
-
从我对 Java 非常有限的理解来看,我查看了这段代码,我看到了两个永远不应该一起看到的概念:HTML 和 Regex。如果这段代码正在做我认为的事情(使用正则表达式解析 HTML),我强烈建议您从重写此代码的机会中获利,以便正确执行此操作,即使用像 Html Agility Pack 或 SGMLReader 这样的 html 解析器。忘记那些正则表达式、字符串生成器和字符串修剪。以正确的方式去做。
-
@Darin,我同意你的看法;但这应该是已经用 Java 编写的 HTML/CSS/Javascript 压缩器的快速移植。