【问题标题】:Find last substring starting with uppercase letter查找以大写字母开头的最后一个子字符串
【发布时间】:2015-09-23 10:01:33
【问题描述】:

我有一个包含字符串的变量。我想找到从最后一个大写字母开始的子字符串,比如下面的“Hig”:

string str = "AbcDefHig";

string substring = "Hig";

【问题讨论】:

  • 预期的结果是什么?你想找到Hig,因为那是一个以大写H开头的子字符串?
  • 是的,我想找到一个从最后一个大写字母开始的子字符串,即 Hig 并忽略 AbcDef
  • @GhanshyamShukla 你应该接受蒂姆的回答——这是正确的

标签: c# .net substring


【解决方案1】:

可以使用Array.FindLastIndexChar.IsUpper获取索引:

string str = "AbcDefHig";
int lastCapital =  Array.FindLastIndex<char>(str.ToCharArray(), Char.IsUpper);
string result = null;
if (lastCapital >= 0)
   result = str.Substring(lastCapital); // Hig

【讨论】:

  • @GhanshyamShukla:不客气。如果您的问题得到解答,请记住接受答案。
【解决方案2】:
     static void Main(string[] args)
        {
            string word = "AbcdefHig";
            try
            {
                Console.Write(word.Substring(LastCapital(word)));

            }
            catch(Exception e)
            {
                Console.Write("no capital letter");
            }
        }

      private static int LastCapital(string word)
        {
            for(int i = word.Length - 1; i >= 0; i--)
            {
                if (Char.IsUpper(word[i]))
                {
                    return i;
                }
            }
            return -1;
        }

【讨论】:

  • 使用word[i] 代替word.ElementAt(i)。也不要在正常工作流程中使用异常。您只需将int 值存储在变量中,并在使用Substring 之前将其与-1 进行比较。
  • 是的,你是对的,这只是为了快速,我会编辑
  • 现在如果输入没有大写字母(word.Substring(-1))会抛出。
  • 你可以检查异常或结果是否大于零?
【解决方案3】:

您可以通过以下方法找到所有大写索引:

来源:Find Index of the First Uppercase character

var result = (from ch in spam.ToArray() where Char.IsUpper(ch) 
         select spam.IndexOf(ch))

如果你对字符串运行这个,说

"string spam = "abcdeFgihjklmnopQrstuv";"

结果将是:5、16。

所以通过从列表中获取最后一个索引 - 即上面的例子是 16 然后你可以做str.Substring(result.Last())

【讨论】:

  • spam.IndexOf(ch) 如果输入多次包含相同的大写字符,则返回第一次出现的索引。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 2014-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多