VB.NET:将包含“Lastname,Firstname”的字符串转换为“Firstname Lastname”

时间:2012-05-24 00:15:38

标签: vb.net string

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

这就是我现在这样做的方式:

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

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

  

ArgumentOutOfRangeException未处理

     

索引和长度必须引用字符串

中的位置      

参数名称:长度

有人可以解释为什么我会收到此错误以及我应该怎么做?

5 个答案:

答案 0 :(得分:6)

您收到的错误是:

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)

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

String.Substring的第二个参数是子字符串的长度,而不是结束位置。出于这个原因,如果你使用n>进行str.Substring(n, str.Length),你总是会超出范围。 0(这将是子串的整个点)。

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

答案 3 :(得分:0)

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

假设您有一个包含最后逗号空格优先类型名称的文件,如下所示:

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

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

答案 4 :(得分:0)

这样可以保持海报格式。

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

结果名称=" John Doe"