簡體   English   中英

檢查字符串是否具有累積大寫字母

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM