我试图整理一个解决方案: 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。
我做错了什么?
答案 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())))