如何用String.Split方法拆分字符串提取个人名、姓、出生地信息
字符串拆分需求与代码修复
我需要拆分以下内容:
string text = "John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow";
需要从该记录中分别提取以下数据:
- 名字
- 姓氏
- 出生地
换句话说,要使用String类的方法处理该字符串,分别提取每个人的信息,核心是将字符串拆分为多个部分。
现有如下代码,需要完善以实现需求:
string text = " John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow"; string[] textArray = text.Split('"', ' '); Console.WriteLine("Date: "); foreach (string str in textArray) { for (int i = 0; i < textArray.Length; i++) { string[] FirstName = textArray[i].Split(' '); string[] LastName = textArray[i].Split('.'); string[] BirthPlace = textArray[i].Split('/'); Console.WriteLine($"First name: {FirstName} Last Name: {LastName} BirthPlace: {BirthPlace}"); } }
问题分析
原代码存在几个明显问题:
- 拆分文本时包含了无意义的
'"'分隔符,原字符串中没有双引号,会导致拆分出空字符串; - 嵌套循环完全多余,外层
foreach已经在遍历数组,内层循环重复处理所有元素; - 拆分逻辑错误,没有针对性提取对应字段,直接输出数组会显示类型名而非实际内容。
修复后的代码
string text = " John.Davidson/Belgrade Michael.Barton/Krakow Ivan.Perkinson/Moscow"; // 先去除首尾空格,再按空格拆分,同时自动移除空项 string[] personEntries = text.Trim().Split(' ', StringSplitOptions.RemoveEmptyEntries); Console.WriteLine("人员信息:"); foreach (string entry in personEntries) { // 按/拆分,分离姓名段和出生地 string[] namePlaceSplit = entry.Split('/'); string birthPlace = namePlaceSplit[1]; // 对姓名段按.拆分,得到名字和姓氏 string[] nameSplit = namePlaceSplit[0].Split('.'); string firstName = nameSplit[0]; string lastName = nameSplit[1]; Console.WriteLine($"First name: {firstName} Last Name: {lastName} BirthPlace: {birthPlace}"); }
代码说明
Trim():清理字符串首尾的空格,避免拆分出无效空项;Split(' ', StringSplitOptions.RemoveEmptyEntries):按空格拆分人员条目,自动过滤拆分产生的空字符串;- 分层拆分:先通过
/分离出生地和姓名组合,再通过.拆分姓名组合得到名字和姓氏,确保每段信息精准提取; - 直接输出提取到的具体字符串值,而非数组对象。
内容的提问来源于stack exchange,提问作者Madalina Maxim
相关产品推荐
相关产品推荐

