C# 向滴定酶方法C添加异常#
我有下面的代码将字符串转换为TitleCase。 我想对此创建一个例外,这样,如果输入的字符串在序列中找到确切的字符,它将忽略它并继续转换字符串的其余部分。例如,如果字符串的一部分包含:ABC,我想作为规则忽略它,并继续转换TitleCase中字符串的其余部分:C# 向滴定酶方法C添加异常#,c#,methods,title-case,C#,Methods,Title Case,我有下面的代码将字符串转换为TitleCase。 我想对此创建一个例外,这样,如果输入的字符串在序列中找到确切的字符,它将忽略它并继续转换字符串的其余部分。例如,如果字符串的一部分包含:ABC,我想作为规则忽略它,并继续转换TitleCase中字符串的其余部分: public string ConvertToTitleCase(string input) { char[] chars = CultureInfo.CurrentCulture.TextInfo.ToTitl
public string ConvertToTitleCase(string input)
{
char[] chars = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input.ToLower()).ToCharArray();
for (int i = 0; i + 1 < chars.Length; i++)
{
if ((chars[i].Equals('\'')) ||
(chars[i].Equals('-')))
{
chars[i + 1] = Char.ToUpper(chars[i + 1]);
}
}
return new string(chars);
}
public string ConvertToTitleCase(字符串输入)
{
char[]chars=CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input.ToLower()).ToCharArray();
for(int i=0;i+1
有什么想法吗?通常情况下,在这种情况下,您不需要逐个字符地枚举,而是将字符串分解为多个部分(可能是通过正则表达式,或者以某种方式,细节并不重要),分别处理每个部分(将每个部分的第一个字符大写),然后将所有内容连接回来 在这个场景中,所有的例外都是你不能触摸的“部分” 因此,算法是:
- 将字符串拆分为标记
- 枚举令牌和进程(如果是异常,则忽略)
- 将令牌连接回字符串
祝您好运:)您应该使用
匹配评估器尝试类似的方法
return Regex.Replace(input,
@"\S+",
(match) =>
{
var word = match.Value;
var formatException = yourListOfTitleCaseExceptions.FirstOrDefault(e => e.Trim().Equals(word, StringComparison.InvariantCultureIgnoreCase));
if (formatException == null)
{
Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(word.ToLower())
}
return formatException.Trim();
});
这将把单词分开,检查你所做的例外列表并忽略标题框。如果找不到该单词,它将按预期的方式显示标题大小写。如果发现异常,将返回未触及的单词。这就是您所需要的
private string ConvertToTitleCase(string input, string ignore) {
var lcSB = new StringBuilder();
var lcStart = 0;
while (lcStart < input.Length) {
var lcNext = input.IndexOf(ignore, lcStart);
if (lcNext < 0)
lcNext = input.Length;
lcSB.Append(input.Substring(lcStart, lcNext - lcStart).ToUpper());
if (lcNext < input.Length)
lcSB.Append(ignore);
lcStart = lcNext + ignore.Length;
}
return lcSB.ToString();
}
私有字符串ConvertToTitleCase(字符串输入,字符串忽略){
var lcSB=新的StringBuilder();
var lcStart=0;
while(lcStart
您是否使用了异常一词?我不知道你在这里想干什么。当字符串包含“ABC”时,是否要引发异常,或使用筛选选项ABC@vulkanino-编程之外的单词有不止一个含义一个被排除在一般语句之外或不遵守规则的人或事。
@Jamiec如果他想抛出一个(编程)异常,或者如果他想创建通用转换规则的异常。@vulkanino显然,我不是指(编程)例外情况。+1同意。根据代码,他可能想用两条例外规则对源字符串进行标题转换。规则一:如果字符由\或-
转义,则转换为大写。规则二:如果字符串包含特殊模式(例如ABC),然后保持该模式大写。嗨@vulkanino,是的,这是我试图完成的。如果输入的字符串有一个特殊的模式,例如,如果我输入到该方法的字符串包含一个句子,并且句子中的一个单词是:ABC,按该确切顺序排列。我希望该方法忽略此特殊模式并继续到n句子中的ext单词。如果我没有正确解释,很抱歉各位。感谢大家的帮助,我已经习惯用VB编码,虽然在本例中,原始程序是用C#编写的。我为这个程序编写了标题case方法,只是有点难以为创建的方法添加某些规则。再次感谢大家。Tha这是我使用的代码,尽管为了达到我的目的,我不得不稍微修改一下。如果我输入的字符串都是大写的,(不包括特殊模式:ABC)它不会转换为标题大小写,因为需要先将其设置为所有小写。这是我修改的代码,以实现我的要求:1.lcSB.Append(input.Substring(lcStart,lcNext-lcStart.ToLower());2.return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(lcSB.ToString());谢谢:-)