2

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

这就是我现在的做法:

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

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

ArgumentOutOfRangeException 未处理

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

参数名称:长度

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

4

5 回答 5

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)
于 2012-05-24T00:18:36.877 回答
1

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

Dim originalName As String = "Last,First"
Dim parts = name.Split(","C)
Dim name As String = parts(1) & "  " & parts(0)
于 2012-05-24T00:22:34.677 回答
1

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

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

于 2012-05-24T00:23:38.593 回答
0

如果你使用的是 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

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

于 2014-02-10T07:25:21.553 回答
0

这将保持海报格式。

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

结果名称 = "John Doe"

于 2015-08-13T16:57:25.143 回答