我刚开始用C#编程,所以我是初学者,我一直在练习一些代码,我希望你对某些事情有所了解。
我有飞机的飞行方向,例如''伦敦 - 柏林''(方向)。我想创建一个方法,它将返回飞机起点(伦敦)的第一个和最后一个辅音,以及飞机目的地(柏林)的第一个和最后一个辅音。我写过这个,所以我想知道它是否正常,或者你是否有一些建议:
public class Flight
{
private string direction;
public Flight(string direction)
{
this.direction = direction;
}
public string Consonants()
{
string starting = direction.Split('-')[0];
string destination = direction.Split('-')[1];
string startConsonants = starting.ToUpper().Replace("A", "").Replace("E", "").Replace("I", "").Replace("O", "").Replace("U", "");
string destConsonants = destination.ToUpper().Replace("A", "").Replace("E", "").Replace("I", "").Replace("O", "").Replace("U", "");
return string.Format("{0}{1}-{2}{3}", startConsonants[0].ToString(), startConsonants[startConsonants.Length-1].ToString(), destConsonants[0].ToString(), destConsonants[destConsonants.Length-1].ToString());
}
}
答案 0 :(得分:0)
如果您不介意大写/小写区分,那么您可以使用Linq提取所需的信息
public string Consonants()
{
string starting = direction.Split('-')[0];
string destination = direction.Split('-')[1];
char[] cs = new char[] {'B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Z'};
string startFirst = starting.ToUpper().ToCharArray().First(x => cs.Contains(x)).ToString();
string startLast = starting.ToUpper().ToCharArray().Last(x => cs.Contains(x)).ToString();
string destFirst = destination.ToUpper().ToCharArray().First(x => cs.Contains(x)).ToString();
string destLast = destination.ToUpper().ToCharArray().Last(x => cs.Contains(x)).ToString();
return string.Format("{0}{1}-{2}{3}", startFirst, startLast, destFirst, destLast);
}
答案 1 :(得分:0)
以下是一些建议:
1 - 第一点是合乎逻辑的。如果您传递字符串“London-Lebanon”,则输出为LN-LN,我认为它无效。使用您的版本,如果您通过“伦敦 - 阿联酋”,您也可能会收到错误。
2 - 您的构造函数需要参数但不清楚原因。我建议你将参数传递给使用它的方法,并在处理之前检查参数是否有效,如下所示。
3 - 无缘无故地重复拆分两次。
4 - 即使在字符串参数上,也会多次重复ToString()。
5 - 您可以定义一个私有方法来进行格式化。如果您更改规则,这可以防止错误。
这是我的版本,包含以上几点(第一点除外):
class Flight
{
public string Consonants(string direction)
{
string[] words = direction.Split('-');
// check if the separator is missing
if (words.Length!=2) return string.Empty; //missing separator error
return string.Format("{0}-{1}", Replacer(words[0]), Replacer(words[1]));
}
private string Replacer(string arg)
{
string abr= arg.ToUpper().Replace("A", string.Empty).Replace("E", string.Empty).Replace("I", string.Empty).Replace("O", string.Empty).Replace("U", string.Empty);
if (abr.Length < 2)
throw new Exception(string.Format("processing error in Replacer input {0} outpur {1}", arg, abr)); // example if you pass: UAE
return string.Format("{0}{1}", abr[0], abr[abr.Length - 1] );
}
}