【问题标题】:Converting characters from Lower to upper case and vice versa VB.Net将字符从小写转换为大写,反之亦然 VB.Net
【发布时间】:2014-02-15 13:00:05
【问题描述】:

四处搜索,找不到答案。

我的任务是将字符串大小写从小写或大写转换为大写,然后将它们四舍五入..

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

我知道我需要使用 for 循环,但无法弄清楚如何逐步遍历每个字符、检查大小写并在需要时切换它。

我可以创建一个 for 循环来计数并显示单个字符或一个简单的 If 语句将整个字符串转换为大写或小写,但如果我尝试将 2 组合起来,我的逻辑就无法正常工作。

任何人都可以帮忙吗?

【问题讨论】:

  • 尝试验证ASCII码,大小写不同
  • 实际上只有一点不同:例如,'A' 是 41H,'a' 是 61H - 所以你可以用 20H 进行异或运算。
  • @peterG 当然,这仅适用于 ASCII 文本,甚至可能不适用于所有代码页。
  • @Steven Doggart - 是的,你可能是对的。我是个老顽童。事实上,我的第一反应是“在硬件中使用 XOR gate ”;-)
  • @peterG 您不必为高效而感到羞耻 :) 但是,当更强大的硬件成本低于雇用高效的程序员时,可悲的是,您的同类是垂死的品种。我实际上从来没有意识到他们有点像那样。这是一个聪明的把戏。

标签: vb.net string uppercase lowercase


【解决方案1】:

作为 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)

老实说,这些天谁写循环? :-)

【讨论】:

  • 老派,也许吧? :)
  • 它不会让我解决这个问题,因为编辑需要至少 6 个字符(无论出于何种原因),但您需要删除分号。语法错误。否则,这太棒了。
  • @Damien_The_Unbeliever -- 哈哈,所以你也这样做了?
  • @roryap 好吧,my SO 沙盒解决方案包含 VB C# 项目。 :)
  • @StevenDoggart:SSD 绝对有帮助。否则,是的,很难,真的很难超越你们。不过打字技巧练习很好。
【解决方案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 对象)。

正如 Neolisk 在下面的 cmets 中建议的那样,您可以通过创建另一种转换单个字符的方法来使其更简洁,如下所示:

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

InvertCase(Char) 使用相同的函数,您也可以使用 LINQ,如下所示:

Public Function InvertCase(input As String) As String
    Return New String(input.Select(Function(i) InvertCase(i)).ToArray())
End Function

【讨论】:

  • 这正是我要发布的内容。 StringBuilder + Char.ToLowerChar.ToUpper。 +1 对于每个内容,可以重构以将 char 反转为单独的函数。然后它会看起来更漂亮。
  • 老兄,你是救命稻草,我已经坚持了 2 天了!!也没想到大家反应这么快,非常感谢!!现在来了解一下 String builder,这样我就可以完全理解这里发生了什么!
  • @user3232220:你最好接受史蒂文的回答。因为另一个甚至不是答案,只是文章的链接。
  • @roryap:如果您喜欢 Damien 的回答,请随时点赞。我更喜欢 Steven 的解决方案,因为它更像是企业代码——简单、可扩展和可维护。随着时间的推移,LINQ 会随着变化而变得更糟。所以我通常不建议将 LINQ 用于比Function(x) x.somethingToArray 及其组合更复杂的东西。
  • @Neolisk -- 我赞成这两个答案,因为他们都应得的。
猜你喜欢
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 2013-09-21
相关资源
最近更新 更多