【问题标题】:C# array string names change content orderC# 数组字符串名称更改内容顺序
【发布时间】:2016-11-16 19:38:32
【问题描述】:

我一直想弄清楚如何制作一个程序来更改数组中名称的顺序。 期望程序首先显示姓氏,然后显示名字,其余的名字必须缩写。

    static void Main(string[] args)
    {
        string[] names = { "Paul Page Load Wood", "Michael Kraiser Unter", "Mia Rock Spark" };
        /*Present the names 
        names[1] = "Wood, Paul P. l.";
        names[2] = "Unter, Michael K.";
        names[3] = "Spark, Mia R."*/

    }

你能帮忙吗?

谢谢

这是我目前所拥有的:

static void Main(string[] args)
{
    string[] names = { "Paul Page Load Wood", "Michael Kraiser Unter", "Mia Rock Spark" };
    int i = 0;
    foreach (string name in names)
    {
        string[] eachName = name.Split(' '); // I was advised to no use .split
        for (int j = 0; j < eachName.Length; j++)
        {
            Console.WriteLine("{0} {1}", j, eachName[j]);
        }
        i++;
        Console.WriteLine();
    }
}

【问题讨论】:

标签: c# arrays split


【解决方案1】:

首先,让我们制定规则

  1. 一个部分"John" -&gt; "John"(什么都不做)
  2. 两个部分"John Smith" -&gt; "Smith, John"(最后一个,第一个)
  3. 三个+部分"John Peter Jack Smith" -&gt; "Smith, John P. J."(最后,第一,其他按单个字母顺序)

有了这些规则,我们可以实现一个简单的重新排序:

private static String ReOrderNamesParts(string name) {
  if (string.IsNullOrEmpty(name))
    return name;

  string[] parts = name.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

  if (parts.Length <= 0)
    return name;

  StringBuilder sb = new StringBuilder(parts[parts.Length - 1]);

  if (parts.Length > 2) {
    sb.Append(", ");
    sb.Append(parts[0]);
  }

  for (int i = 1; i < parts.Length - 1; ++i) {
    sb.Append(' ');
    sb.Append(parts[i].Substring(0, 1));
    sb.Append('.');
  }

  return sb.ToString();
}

所以你可以放

string[] names = { "Paul Page Load Wood", "Michael Kraiser Unter", "Mia Rock Spark" };

for (int i = 0; i < names.Length; ++i)
  names[i] = ReOrderNamesParts(names[i]);

或者如果你只想打印出来:

Console.Write(String.Join(Environment.NewLine, 
  names.Select(name => eOrderNamesParts(names))));

【讨论】:

  • @Pedro Silva:请问SplitStringBuilder 有什么问题?将初始字符串 split 分成几个部分,然后从重新排序的部分 build 是很自然的。
猜你喜欢
  • 2014-03-08
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 2013-02-06
相关资源
最近更新 更多