将字符串中的字符替换为行中下一个的大写字母(Pascal 大小写)
Replace character in string with Uppercase of next in line (Pascal Casing)
我想从字符串中删除所有下划线,下划线后面的字符为大写。因此,例如:_my_string_
变为:MyString
同样:my_string
变为 MyString
有没有更简单的方法呢?我目前有以下内容(假设没有输入有两个连续的下划线):
StringBuilder sb = new StringBuilder();
int i;
for (i = 0; i < input.Length - 1; i++)
{
if (input[i] == '_')
sb.Append(char.ToUpper(input[++i]));
else if (i == 0)
sb.Append(char.ToUpper(input[i]));
else
sb.Append(input[i]);
}
if (i < input.Length && input[i] != '_')
sb.Append(input[i]);
return sb.ToString();
现在我知道这并不完全相关,但我想 运行 关于答案中提供的实现的一些数字,这里是每个使用 1000000 iterations
的实现的结果(以毫秒为单位)字符串:"_my_string_121_a_"
:
Achilles: 313
Raj: 870
Damian: 7916
Dmitry: 5380
Equalsk: 574
使用的方法:
Stopwatch stp = new Stopwatch();
stp.Start();
for (int i = 0; i < 1000000; i++)
{
sb = Test("_my_string_121_a_");
}
stp.Stop();
long timeConsumed= stp.ElapsedMilliseconds;
最后我想我会选择 Raj 的实现,因为它非常简单易懂。
您需要将蛇形大小写转换为驼色大小写,您可以使用这段代码,它对我有用
var x ="_my_string_".Split(new[] {"_"}, StringSplitOptions.RemoveEmptyEntries)
.Select(s => char.ToUpperInvariant(s[0]) + s.Substring(1, s.Length - 1))
.Aggregate(string.Empty, (s1, s2) => s1 + s2);
x = MyString
这必须使用 ToTitleCase 使用 System.Globalization
命名空间
static string toCamel(string input)
{
TextInfo info = CultureInfo.CurrentCulture.TextInfo;
input= info.ToTitleCase(input).Replace("_", string.Empty);
return input;
}
尝试使用正则表达式:
var regex = new Regex("^[a-z]|_[a-z]?");
var result = regex.Replace("my_string_1234", x => x.Value== "_" ? "" : x.Value.Last().ToString().ToUpper());
测试:
my_string -> MyString
_my_string -> MyString
_my_string_ -> MyString
更短(正则表达式),但我怀疑它是否更好(正则表达式可读性较差):
string source = "_my_string_123__A_";
// MyString123A
string result = Regex
// _ + lower case Letter -> upper case letter (thanks to Wiktor Stribiżew)
.Replace(source, @"(_+|^)(\p{Ll})?", match => match.Groups[2].Value.ToUpper())
// all the other _ should be just removed
.Replace("_", "");
遍历每个字符并根据需要转换为大写。
public string GetNewString(string input)
{
var convert = false;
var sb = new StringBuilder();
foreach (var c in input)
{
if (c == '_')
{
convert = true;
continue;
}
if (convert)
{
sb.Append(char.ToUpper(c));
convert = false;
continue;
}
sb.Append(c);
}
return sb.ToString().First().ToString().ToUpper() + sb.ToString().Substring(1);
}
用法:
GetNewString("my_string");
GetNewString("___this_is_anewstring_");
GetNewString("___this_is_123new34tring_");
输出:
MyString
ThisIsAnewstring
ThisIs123new34tring
static string toCamel(string input)
{
StringBuilder sb = new StringBuilder();
int i;
for (i = 0; i < input.Length; i++)
{
if ((i == 0) || (i > 0 && input[i - 1] == '_'))
sb.Append(char.ToUpper(input[i]));
else
sb.Append(char.ToLower(input[i]));
}
return sb.ToString();
}
我想从字符串中删除所有下划线,下划线后面的字符为大写。因此,例如:_my_string_
变为:MyString
同样:my_string
变为 MyString
有没有更简单的方法呢?我目前有以下内容(假设没有输入有两个连续的下划线):
StringBuilder sb = new StringBuilder();
int i;
for (i = 0; i < input.Length - 1; i++)
{
if (input[i] == '_')
sb.Append(char.ToUpper(input[++i]));
else if (i == 0)
sb.Append(char.ToUpper(input[i]));
else
sb.Append(input[i]);
}
if (i < input.Length && input[i] != '_')
sb.Append(input[i]);
return sb.ToString();
现在我知道这并不完全相关,但我想 运行 关于答案中提供的实现的一些数字,这里是每个使用 1000000 iterations
的实现的结果(以毫秒为单位)字符串:"_my_string_121_a_"
:
Achilles: 313
Raj: 870
Damian: 7916
Dmitry: 5380
Equalsk: 574
使用的方法:
Stopwatch stp = new Stopwatch();
stp.Start();
for (int i = 0; i < 1000000; i++)
{
sb = Test("_my_string_121_a_");
}
stp.Stop();
long timeConsumed= stp.ElapsedMilliseconds;
最后我想我会选择 Raj 的实现,因为它非常简单易懂。
您需要将蛇形大小写转换为驼色大小写,您可以使用这段代码,它对我有用
var x ="_my_string_".Split(new[] {"_"}, StringSplitOptions.RemoveEmptyEntries)
.Select(s => char.ToUpperInvariant(s[0]) + s.Substring(1, s.Length - 1))
.Aggregate(string.Empty, (s1, s2) => s1 + s2);
x = MyString
这必须使用 ToTitleCase 使用 System.Globalization
命名空间
static string toCamel(string input)
{
TextInfo info = CultureInfo.CurrentCulture.TextInfo;
input= info.ToTitleCase(input).Replace("_", string.Empty);
return input;
}
尝试使用正则表达式:
var regex = new Regex("^[a-z]|_[a-z]?");
var result = regex.Replace("my_string_1234", x => x.Value== "_" ? "" : x.Value.Last().ToString().ToUpper());
测试:
my_string -> MyString
_my_string -> MyString
_my_string_ -> MyString
更短(正则表达式),但我怀疑它是否更好(正则表达式可读性较差):
string source = "_my_string_123__A_";
// MyString123A
string result = Regex
// _ + lower case Letter -> upper case letter (thanks to Wiktor Stribiżew)
.Replace(source, @"(_+|^)(\p{Ll})?", match => match.Groups[2].Value.ToUpper())
// all the other _ should be just removed
.Replace("_", "");
遍历每个字符并根据需要转换为大写。
public string GetNewString(string input)
{
var convert = false;
var sb = new StringBuilder();
foreach (var c in input)
{
if (c == '_')
{
convert = true;
continue;
}
if (convert)
{
sb.Append(char.ToUpper(c));
convert = false;
continue;
}
sb.Append(c);
}
return sb.ToString().First().ToString().ToUpper() + sb.ToString().Substring(1);
}
用法:
GetNewString("my_string");
GetNewString("___this_is_anewstring_");
GetNewString("___this_is_123new34tring_");
输出:
MyString
ThisIsAnewstring
ThisIs123new34tring
static string toCamel(string input)
{
StringBuilder sb = new StringBuilder();
int i;
for (i = 0; i < input.Length; i++)
{
if ((i == 0) || (i > 0 && input[i - 1] == '_'))
sb.Append(char.ToUpper(input[i]));
else
sb.Append(char.ToLower(input[i]));
}
return sb.ToString();
}