我正在尝试将包含某个名称的字符串转换为“Last,First”到“First Last”。
这就是我现在这样做的方式:
name = name.Trim
name = name.Substring(name.IndexOf(",") + 1, name.Length) & " " & name.Substring(0, name.IndexOf(",") - 1)
当我这样做时,我收到以下错误:
ArgumentOutOfRangeException未处理
索引和长度必须引用字符串
中的位置参数名称:长度
有人可以解释为什么我会收到此错误以及我应该怎么做?
答案 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"