You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows7+VS2019下如何移除StringBuilder中|与,间的字符?

嘿,我懂你遇上的麻烦了——要把StringBuilder里那些夹在|和,之间的内容删掉,对吧?之前用Substring没搞定,大概率是因为要处理好几个这样的片段,手动截取索引太容易出错了。我给你几个在VS2019里绝对能用的办法,挑你顺手的来:

方法一:正则表达式替换(最简洁)

这种方法一行替换就能搞定,特别适合快速实现需求。核心是用正则匹配所有|到下一个,之间的内容,直接替换为空:

using System.Text;
using System.Text.RegularExpressions;

// 初始化你的StringBuilder
StringBuilder sb = new StringBuilder("578.552|0,37.986|317,38.451|356,23");
// 执行正则替换
string processedStr = Regex.Replace(sb.ToString(), @"\|[^,]+", string.Empty);
// 如果还需要StringBuilder对象,重新赋值即可
sb.Clear().Append(processedStr);

// 现在sb的内容就是"578.552,37.986,38.451,23"

简单解释下正则规则:\|是转义后的|(避免被正则当成特殊符号),[^,]+表示匹配任意非逗号的字符至少一次,这样就精准定位到了每个要删除的片段。

方法二:分割拼接法(逻辑清晰易调试)

如果你对正则不太熟悉,这种分步处理的方式更直观:先把字符串按逗号分割成数组,逐个处理每个元素去掉|后面的部分,最后再拼接起来:

using System.Text;

StringBuilder sb = new StringBuilder("578.552|0,37.986|317,38.451|356,23");
// 按逗号分割成独立片段
string[] segments = sb.ToString().Split(',');
StringBuilder resultSb = new StringBuilder();

foreach (string seg in segments)
{
    int pipePos = seg.IndexOf('|');
    if (pipePos != -1)
    {
        // 截取|前面的内容
        resultSb.Append(seg.Substring(0, pipePos));
    }
    else
    {
        // 没有|的片段直接保留
        resultSb.Append(seg);
    }
    // 不是最后一个片段就加逗号
    if (seg != segments[^1]) // C# 8.0及以上支持这种索引写法,VS2019默认支持
    {
        resultSb.Append(',');
    }
}

// resultSb里就是你要的最终内容

这种方法每一步都清晰,要是调试的话能很容易看到每个片段的处理结果。

方法三:直接操作StringBuilder(高效适合大文本)

如果你的StringBuilder里内容特别大,不想反复转字符串浪费性能,可以直接在StringBuilder上循环删除目标片段:

using System.Text;

StringBuilder sb = new StringBuilder("578.552|0,37.986|317,38.451|356,23");
int pipeIndex;

// 循环查找所有|的位置,直到没有为止
while ((pipeIndex = sb.IndexOf("|")) != -1)
{
    int commaIndex = sb.IndexOf(",", pipeIndex);
    if (commaIndex != -1)
    {
        // 删除从|开始到逗号前的内容,长度是逗号索引减去|的索引
        sb.Remove(pipeIndex, commaIndex - pipeIndex);
    }
    else
    {
        // 如果后面没有逗号,说明是最后一段,直接删除|及后面的所有内容
        sb.Remove(pipeIndex, sb.Length - pipeIndex);
    }
}

// 处理完成后sb就是目标内容

这种方法全程操作StringBuilder对象,避免了额外的字符串内存开销,处理大文本时优势明显。

内容的提问来源于stack exchange,提问作者Bill Yeung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 08:52:50