[英]Check if a string has cumulative uppercase letter
我想要一個 function 返回 substring 的字符串,其中包含一個“累積”大寫字母。
傳遞給 function 的字符串可以是任何內容。
例子:
check("ProcessFlowPFDiagram")
//返回[“PF”]
check("MinistryOfEducationMOEProgram")
// 返回 ["MOE"]
check("WhateverStringWEStringIsPassedONE")
//返回[“WE”,“ONE”]
check("nouppercaseletterhere")
// 返回 [""]
check("ALLUPPERCASE")
//返回[“”]
check("test123TESTghedEFGjhgcdhj")
//返回[“TES”,“EF”]
check("GREATgreatGoodJOB")
// 返回 ["GREA", "JOB"]
關於如何實施 function 的任何想法?
您需要更好地解釋問題。 但是根據您的示例,我了解到您正在尋找 2 個以上大寫字母的組,不包括后跟小寫字母的大寫字母。 您可以通過多種方式解決此問題。 一種方法是使用正則表達式。 這個正則表達式讓你非常接近(在線測試):
([A-Z]+)([A-Z][^A-Z]+|$)
我得到不同 output 的唯一示例輸入是ALLUPPERCASE
。 您確定這是預期的 output 嗎? 如果是這樣,為什么?
同樣,您需要更好地定義問題。 但這至少應該給你一個起點。
你的問題對我來說並不完全清楚。 我不知道為什么"ALLUPPERCASE"
應該返回一個空結果。 因此,我一開始就將其作為特例處理。 看這段代碼:
private static IEnumerable<string> Check(string input)
{
if(input.All(char.IsUpper))
{
return new List<string> {""};
}
List<string> result = new List<string>();
StringBuilder buffer = new StringBuilder();
foreach(var c in input)
{
if(char.IsUpper(c))
{
buffer.Append(c);
}
else
{
if(buffer.Length > 1)
{
buffer.Length--;
result.Add(buffer.ToString());
}
buffer.Clear();
}
}
if(buffer.Length > 0)
{
result.Add(buffer.ToString());
}
if(!result.Any())
{
result.Add("");
}
return result;
}
首先,我們處理特殊情況。 然后我們將字符串和 append 個大寫字母循環到緩沖區。 如果有非大寫字母且緩沖區中有多個字符,緩沖區的輸入將保存在一個臨時列表中並再次清除。 此列表是結果列表,在方法結束時返回。
此代碼通過了所有測試用例: https://do.netfiddle.net/AGf1Pf
string foo = "WhateverStringWEStringIsPassedONE";
// match Uppercase "[A-Z]" letter at least 2 in a row "{2,}", followed by "(?= )" uppercase letter "[A-Z]" or "|" <end> "$"
var matches = Regex.Matches(foo, @"[A-Z]{2,}(?=[A-Z]|$)");
foreach (var match in matches)
Console.WriteLine(match);
[編輯] 我看到它沒有涵蓋“all uc”案例。 但是我會額外檢查一下,以免使正則表達式更復雜。
我想要一個 function 返回 substring 的字符串,其中包含“累積”大寫字母。
傳遞給 function 的字符串可以是任何字符串。
例子:
check("ProcessFlowPFDiagram")
// 返回 ["PF"]
check("MinistryOfEducationMOEProgram")
// 返回 ["MOE"]
check("WhateverStringWEStringIsPassedONE")
// 返回 ["WE", "ONE"]
check("nouppercaseletterhere")
// 返回 [""]
check("ALLUPPERCASE")
// 返回 [""]
check("test123TESTghedEFGjhgcdhj")
// 返回 ["TES", "EF"]
check("GREATgreatGoodJOB")
// 返回 ["GREA", "JOB"]
關於如何實現 function 的任何想法?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.