Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.Net将字符从小写转换为大写,反之亦然_Vb.net_String_Uppercase_Lowercase - Fatal编程技术网

VB.Net将字符从小写转换为大写,反之亦然

VB.Net将字符从小写转换为大写,反之亦然,vb.net,string,uppercase,lowercase,Vb.net,String,Uppercase,Lowercase,四处搜索,找不到答案 我的任务是将字符串的大小写转换为大写或小写,并将其交换 例如:-输入:-“HeLlO”和输出:-“HeLlO” 我知道我需要使用for循环,但还没有弄清楚如何单步遍历每个字符,检查大小写并在需要时切换它 我可以创建一个for循环,通过它计数并显示单个字符,或者一个简单的If语句将整个字符串转换为上限或下限,但是如果我尝试组合2,我的逻辑就不能正常工作 有人能帮忙吗?这里有一个简单的方法: Public Function InvertCase(input As String)

四处搜索,找不到答案

我的任务是将字符串的大小写转换为大写或小写,并将其交换

例如:-输入:-“HeLlO”和输出:-“HeLlO”

我知道我需要使用for循环,但还没有弄清楚如何单步遍历每个字符,检查大小写并在需要时切换它

我可以创建一个for循环,通过它计数并显示单个字符,或者一个简单的If语句将整个字符串转换为上限或下限,但是如果我尝试组合2,我的逻辑就不能正常工作


有人能帮忙吗?

这里有一个简单的方法:

Public Function InvertCase(input As String) As String
    Dim output As New StringBuilder()
    For Each i As Char In input
        If Char.IsLower(i) Then
            output.Append(Char.ToUpper(i))
        ElseIf Char.IsUpper(i) Then
            output.Append(Char.ToLower(i))
        Else
            output.Append(i)
        End If
    Next
    Return output.ToString()
End Function
它只需遍历原始字符串中的每个字符,检查其大小写,修复它,然后将该固定字符追加到新字符串中(通过
StringBuilder
对象)

正如Neolik在下面的评论中所建议的那样,您可以通过创建另一个转换单个字符的方法使其更干净,如下所示:

Public Function InvertCase(input As Char) As Char
    If Char.IsLower(input) Then Return Char.ToUpper(input)
    If Char.IsUpper(input) Then Return Char.ToLower(input)
    Return input
End Function

Public Function InvertCase(input As String) As String
    Dim output As New StringBuilder()
    For Each i As Char In input
        output.Append(InvertCase(i))
    Next
    Return output.ToString()
End Function
Public Function InvertCase(input As String) As String
    Return New String(input.Select(Function(i) InvertCase(i)).ToArray())
End Function
对于
InvertCase(Char)
,使用相同的函数,您也可以使用LINQ,如下所示:

Public Function InvertCase(input As Char) As Char
    If Char.IsLower(input) Then Return Char.ToUpper(input)
    If Char.IsUpper(input) Then Return Char.ToLower(input)
    Return input
End Function

Public Function InvertCase(input As String) As String
    Dim output As New StringBuilder()
    For Each i As Char In input
        output.Append(InvertCase(i))
    Next
    Return output.ToString()
End Function
Public Function InvertCase(input As String) As String
    Return New String(input.Select(Function(i) InvertCase(i)).ToArray())
End Function
作为Linq查询:

Dim input = "HeLlO"
Dim output = new String(input.Select(Function(c)
                            Return If(Char.IsLower(c),Char.ToUpper(c),Char.ToLower(c))
                        End Function).ToArray())
Console.WriteLine(output)

老实说,现在谁在写循环?:-)

尝试验证ASCII码,小写和大写的不同实际上只有一位不同:例如“A”是41H,“A”是61H-因此可以用20H进行异或。@peterG这当然只适用于ASCII文本,而且可能不适用于所有代码页。@Steven Doggart-是的,你可能是对的。我是个老家伙。事实上,我的第一反应是‘用异或门在硬件中实现’;-)@彼得:你不必为自己的效率感到羞耻:)但当更强大的硬件成本低于雇佣高效的程序员时,可悲的是,你这一类人是一个垂死的品种。事实上我从来没有意识到他们是那样的。这是一个聪明的把戏。这正是我要发布的
StringBuilder
+
Char.ToLower
Char.ToUpper
+可以重构每个内容的1,以将字符的大小写转换为单独的函数。然后它会看起来更漂亮;你是救命恩人,我已经在这上面呆了两天了!!我也没想到你们会这么快回复,非常感谢!!现在来学习字符串生成器,以便我能够完全理解这里发生的事情@用户3232220:你最好接受史蒂文的回答。因为另一个答案甚至不是答案,只是一篇文章的链接。@roryap:如果你喜欢Damien的答案,请随意投票。我更喜欢Steven的解决方案,因为它更像企业代码——简单、可扩展和可维护。随着时间的推移,随着变化的到来,LINQ变得越来越糟糕。所以我一般不推荐LINQ处理比函数(x)x更复杂的东西。
某物
数组
,以及它们的组合。@Neolisk——我对两个答案都投了更高的票,因为它们都值得。可能是老派:)它不允许我修复此问题,因为编辑需要至少6个字符(无论出于何种原因),但您需要删除分号。语法错误。否则,这太棒了。@Damien_不信者——哈哈,你也这么做了吗?@roryap嗯,我的so沙盒解决方案同时包含VB和C项目。:)@史蒂文多加特:SSD绝对有帮助。否则是的,很难,真的很难超越你们。不过打字技巧练习还是不错的。