gpt4 book ai didi

c# - 在 CamelCase 字符串之间添加下划线,除了在 LINQ 中继续大写字母

转载 作者:太空宇宙 更新时间:2023-11-03 22:30:16 24 4
gpt4 key购买 nike

我需要在 C# LINQ 中实现一个方法,只要驼峰式字符串中出现大写字母,就会添加下划线。我发现这可以很容易地用 LINQ 写成

string.Concat(value.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString()));

例如:

ThisIsMyOrderDescription --> This_Is_My_Order_Description

但是,如果字符串包含连续的大写字母,我们需要避免在每个字母之间添加下划线,但只能在最后一个大写字符之后。例如:

// using above method would become which is not expected
ThisIsMyAMAZONDescription --> This_Is_My_A_M_A_Z_O_N_Description
// this is what to expect
ThisIsMyAMAZONDescription --> This_Is_My_AMAZON_Description

是否有可能或者我们如何使用 C# LINQ 来执行上述场景? (注意,此时不考虑正则表达式。)

最佳答案

只需检查直接的 char 兄弟并相应地添加下划线:

string test = "ThisIsMyAMAZONDescriptionX";
var list = test.Select((x, i) =>
(i > 0
&& i < test.Length - 1
&& char.IsUpper(x)
&& (!char.IsUpper(test[i - 1])
|| !char.IsUpper(test[i + 1]))
|| (i == test.Length -1
&& char.IsUpper(x)
&& !char.IsUpper(test[i - 1]))) ?
"_" + x.ToString() : x.ToString());
var result = string.Concat(list);

Console.WriteLine(result);
//This_Is_My_AMAZON_Description_X

HTH

关于c# - 在 CamelCase 字符串之间添加下划线,除了在 LINQ 中继续大写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58203458/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com