【问题标题】:VB.NET: Convert string containing "Lastname, Firstname" to "Firstname Lastname"VB.NET:将包含“姓氏,名字”的字符串转换为“名字姓氏”
【发布时间】:2012-05-24 00:15:38
【问题描述】:

我正在尝试将包含某人姓名为“Last, First”的字符串转换为“First Last”。

这就是我现在的做法:

name = name.Trim
name = name.Substring(name.IndexOf(",") + 1, name.Length) & " " & name.Substring(0, name.IndexOf(",") - 1)

当我这样做时,我收到以下错误:

ArgumentOutOfRangeException 未处理

索引和长度必须引用字符串中的位置

参数名称:长度

谁能解释我为什么会收到这个错误以及我应该如何做?

【问题讨论】:

    标签: vb.net string


    【解决方案1】:

    您在这方面遇到了错误:

    name.Substring(name.IndexOf(",") + 1, name.Length)
    

    name.Length 应该减去逗号前的字符串长度。

    最好的方法是拆分字符串。

    Dim oFullname as string = "Last, First"
    Dim oStr() as string = oFullname.split(","c)
    oFullname = oStr(1).trim & " " & oStr(0).trim
    MsgBox (oFullname)
    

    【讨论】:

    • 稍微相关 - 作为拆分呼叫的一部分,“c”是什么?我以前从未见过(直到现在,在这个问题的所有答案中)。
    • 它将字符串转换为字符。
    • @HillBilly.Developer 本例中的分隔符是Char 数据类型的实例;因此它附加了文字类型字符c。
    【解决方案2】:

    String.Substring 的第二个参数是子字符串的长度,而不是结束位置。出于这个原因,如果你在 n > 0 的情况下执行str.Substring(n, str.Length)(这将是子字符串的全部点),你总是会越界。

    您需要在第一个子字符串中从name.Length 中减去name.IndexOf(",") + 1。或者只是按照其他人的建议拆分字符串。

    【讨论】:

      【解决方案3】:

      很简单,你只需要拆分字符串

      Dim originalName As String = "Last,First"
      Dim parts = name.Split(","C)
      Dim name As String = parts(1) & "  " & parts(0)
      

      【讨论】:

      • 我不会对你投反对票,因为你的答案是错误的。在 Vb.net 中,字符串的连接不使用+,而是使用&
      • @johntotetwoo 他的回答实际上是正确的,您可以同时使用 + 和 & 来连接 Vb.net 中的字符串。 &, 是推荐用于字符串的,但两者都有效
      • @MarkHall 是的,您可以同时使用两者,但更推荐使用 &,查看此stackoverflow.com/questions/1088053/…
      • @sleimanjneidi 这不会把它放回名字姓氏的顺序吗? OP 想要反过来!
      • 糟糕,这里没有编译器。你们都是对的。 :(
      【解决方案4】:

      如果你使用的是 Unix 命令行——就像 Mac 上的终端——你可以这样做:

      假设您有一个文件,其中包含您的 last-comma-space-first 类型名称,如下所示:

      Last1, First1
      Last2, First2
      Last3, First3
      

      好的,现在我们将它保存为last_comma_space_first.txt。此时,您可以使用我为您的特定问题提出的这个命令:

      sed -E 's/([A-Za-z0-9]+), ([A-Za-z0-9]+)/\2 \1/g' last_comma_space_first.txt > first_space_last.txt
      

      --->>> 滚动--->>>

      你已经完成了!现在,去检查first_space_last.txt 文件! ^_^ 你应该得到以下信息:

      First1 Last1
      First2 Last2
      First3 Last3
      

      告诉你的朋友......或者不要......

      【讨论】:

        【解决方案5】:

        这可以保持海报格式。

        Name = "Doe,John"
        Name = Replace(Name.Substring(Name.IndexOf(","), Name.Length - Name.IndexOf(",")) & " " & Name.Substring(0, Name.IndexOf(",")), ",", "")
        

        结果名称 = "John Doe"

        【讨论】:

          猜你喜欢
          • 2016-02-22
          • 1970-01-01
          • 2013-01-07
          • 1970-01-01
          • 1970-01-01
          • 2014-10-07
          • 1970-01-01
          • 1970-01-01
          • 2021-09-03
          相关资源
          最近更新 更多