LINQ中的字符替换?

时间:2011-04-26 21:29:24

标签: c# .net vb.net linq

我试图整理一个解决方案: Insert spaces between words on a camel-cased token

基本上,他想把'ThisIsATest'变成'This Is A Test'。我想,'哦,这很简单,我可以用LINQ做到这一点',但我一直在努力。

有人可以帮助我吗?

Dim s As String = String.Join("", From myChar As Char In myStr _
                                  Select If(Char.IsUpper(myChar), (" " & myChar).ToString, myChar.ToString))

我的路径是否开始下降,但是我无法将结果变成我可以使用的东西。我甚至添加了.ToString来尝试获取一个字符串数组,但我仍然收到错误。

  

无法投射类型的对象   'WhereSelectEnumerableIterator`2 [System.Char,System.String]'   输入'System.String []'。

我相信这意味着我得到的是System.Char,System.String的集合,而不仅仅是我想要的System.String。

我做错了什么?

3 个答案:

答案 0 :(得分:5)

您可以使用RegEx并拆分大写字符。

Dim myString as string = "ThisIsATest"
Dim outStr As String = Regex.Replace(myString,"[A-Z]"," $0")

区分大小写的替换将找到每个大写字符并在字符前插入一个空格。

答案 1 :(得分:2)

您需要将第二个参数转换为String []。您可以使用.ToArray()

Dim outStr As String = String.Join("", (From myChar As Char In myStr _
                                               Select If(Char.IsUpper(myChar), (" " & myChar).ToString, myChar.ToString)).ToArray())

答案 2 :(得分:1)

C#:

var myStr = "TestString";
var outStr = string.Concat(myStr.Select(c => char.IsUpper(c) ? " " + c : c.ToString()));

自动翻译为VB.NET:

Dim myStr = "TestString"
Dim outStr = String.Concat(myStr.[Select](Function(c) If(Char.IsUpper(c), " " & Convert.ToString(c), c.ToString())))