加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

.net – String.Replace不替换所有匹配项

发布时间:2020-12-17 00:08:15 所属栏目:大数据 来源:网络整理
导读:为什么line2只替换了一半的事件? Dim line1 As String = "AAA|BBB|CCC|CCC|CCC|CCC|EEE|FFF" Dim line2 As String = "AAA|BBB|CCC|CCC|CCC|CCC|EEE|FFF" Dim line3 As String = "AAA|BBB|CCC|CCC|CCC|CCC|EEE|FFF" line1 = line1.Replace("CCC","") line2 =
为什么line2只替换了一半的事件?
Dim line1 As String = "AAA|BBB|CCC|CCC|CCC|CCC|EEE|FFF"
    Dim line2 As String = "AAA|BBB|CCC|CCC|CCC|CCC|EEE|FFF"
    Dim line3 As String = "AAA|BBB|CCC|CCC|CCC|CCC|EEE|FFF"

    line1 = line1.Replace("CCC","")
    line2 = line2.Replace("|CCC|","||")
    line3 = line3.Replace("CCC|","|")

结果:

line1 = "AAA|BBB|||||EEE|FFF" -- OK,but fails when element is "..|ZZZCCCZZZ|.."
line2 = "AAA|BBB||CCC||CCC|EEE|FFF" -- Not OK
line3 = "AAA|BBB|||||EEE|FFF" -- OK,but fails similar to Line1 edge-case for "..|ZZZCCC|.."

我尝试过使用RegEx,但得到了类似的结果.

下面真的没有比这更好的方法吗?

Do While line1.Contains("|CCC|")
    line1 = line1.Replace("|CCC|","||")
Loop
一旦找到第一个令牌,它就会开始在该令牌之后寻找下一个令牌.所以它找到| CCC |,替换它,然后继续,它看到的第一件事是CCC |哪个不匹配.它不预先扫描字符串,寻找要替换的标记.

考虑一下这样:

鉴于AAA | BBB | CCC | CCC | CCC | CCC | EEE | FFF

它运行到AAA | BBB | CCC |保持IT | CCC |找到了,让我们开始构建我们的字符串:

AAA | BBB || (我们的替代品)

现在让我们继续,我们现在有CCC | CCC | CCC | EEE | FFF继续使用.

它运行到CCC | CCC |保持IT | CCC |被发现,让我们继续添加到我们的字符串:

AAA | BBB || CCC || (我们的替代品)

现在让我们继续,我们现在有CCC | CCC | EEE | FFF等等.

编辑:考虑MSDN上的条目描述返回值:

A string that is equivalent to the current string except that all
instances of oldValue are replaced with newValue.

人们可以读到你预期它预先扫描字符串并找到所有匹配.我没有在MSDN文档中看到任何描述此角落案例的内容.也许这应该添加到MSDN文档中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读