簡體   English   中英

C# 如何在字符串中的每個大寫字符前添加連字符

[英]C# How to add a hyphen before each uppercase character in a string

如何找到現有字符串的大寫字母並在每個字符串之前添加 (-)?

string inputStr = "fhkSGJndjHkjsdA";
string outputStr = String.Concat(inputStr.Where(x => Char.IsUpper(x)));
Console.WriteLine(outputStr);
Console.ReadKey();

此代碼找到大寫字母並將它們打印在屏幕上,但我希望它打印:
fhk-SG-Jndj-Hkjsd-A

我怎樣才能做到這一點?

我認為使用 RegEx 會容易得多:

string outputStr = Regex.Replace(inputStr, "([A-Z])", "-$1");

使用 Linq 聚合的另一個選項:

string inputStr = "fhkSGJndjHkjsdA";
var result = inputStr.Aggregate(new StringBuilder(),
    (acc, symbol) =>
    {
        if (Char.IsUpper(symbol))
        {
            acc.Append('-');
            acc.Append(symbol);
        }
        else
        {
            acc.Append(symbol);
        }
        return acc;
    }).ToString();

Console.WriteLine(result);

使用Where根據謂詞過濾一系列值,然后String.Concat將連接所有為您提供SGJHA的值。

相反,您可以使用Select ,檢查每個字符是否有大寫字符,並在不是大寫字符時返回以-開頭的字符或與字符串相同的字符。

string inputStr = "fhkSGJndjHkjsdA";
String outputStr = String.Concat(inputStr.Select(c => Char.IsUpper(c) ? "-" + c : c.ToString()));
Console.WriteLine(outputStr);

Output

fhk-S-G-Jndj-Hkjsd-A

C# 演示


還要使用正則表達式查找 unicode 大寫字符,您可以使用\p{Lu}查找具有小寫變體的大寫字母,因為Char.IsUpper檢查 Unicode 字符。

在替換中,您可以使用前面帶有-$0來使用完整匹配

string inputStr = "fhkSGJndjHkjsdA";
string outputStr = Regex.Replace(inputStr, @"\p{Lu}", "-$0");
Console.WriteLine(outputStr);

Output

fhk-S-G-Jndj-Hkjsd-A

C# 演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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