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



我正在尝试将包含某人姓名的字符串转换为"最后一个,第一个"。

这就是我现在的做法:

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

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

ArgumentOutOfRangeException 未处理

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

参数名称:长度

有人可以解释为什么我会收到此错误以及我应该如何执行此操作吗?

你在这个问题上遇到错误:

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)

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

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

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

Dim originalName As String = "Last,First"
Dim parts = name.Split(","C)
Dim name As String = parts(1) & "  " & parts(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

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

这将保持海报格式。

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

结果名称 ="John Doe"

相关内容

最新更新