我正在尝试将包含某人姓名的字符串转换为"最后一个,第一个"。
这就是我现在的做法:
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"