C# 向滴定酶方法C添加异常#

C# 向滴定酶方法C添加异常#,c#,methods,title-case,C#,Methods,Title Case,我有下面的代码将字符串转换为TitleCase。 我想对此创建一个例外,这样,如果输入的字符串在序列中找到确切的字符,它将忽略它并继续转换字符串的其余部分。例如,如果字符串的一部分包含:ABC,我想作为规则忽略它,并继续转换TitleCase中字符串的其余部分: public string ConvertToTitleCase(string input) { char[] chars = CultureInfo.CurrentCulture.TextInfo.ToTitl

我有下面的代码将字符串转换为TitleCase。 我想对此创建一个例外,这样,如果输入的字符串在序列中找到确切的字符,它将忽略它并继续转换字符串的其余部分。例如,如果字符串的一部分包含:ABC,我想作为规则忽略它,并继续转换TitleCase中字符串的其余部分:

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());谢谢:-)