回答
您可以將其拆分並重新放回原處:
string[] split = ("North Korea").Split(' ');
StringBuilder sb = new StringBuilder();
for (int i = 0; i < split.Count(); i++)
{
if (i == 0)
sb.Append(split[i].ToLower());
else
sb.Append(split[i]);
}
編輯:切換到一個StringBuilder,而不是像Bazzz建議。
+1我喜歡這種方法,但字符串連接並不是性能和內存管理的好主意。也許你應該用一個StringBuilder添加同樣的例子。 – Bazzz
我同意@Bazzz每次Split/Concat使用獨角獸死亡。 –
對不起每個人都殺了幾個獨角獸:( –
忘記正則表達式。
所有你需要的是一個駝峯轉換算法:
在這裏看到: http://www.codekeep.net/snippets/096fea45-b426-40fd-8beb-dec49d8a8662.aspx
使用這一個:
string camelCase = ConvertCaseString(a, Case.CamelCase);
複製粘貼的情況下,它會脫機:
void Main() {
string a = "background color-red.brown";
string camelCase = ConvertCaseString(a, Case.CamelCase);
string pascalCase = ConvertCaseString(a, Case.PascalCase);
}
/// <summary>
/// Converts the phrase to specified convention.
/// </summary>
/// <param name="phrase"></param>
/// <param name="cases">The cases.</param>
/// <returns>string</returns>
static string ConvertCaseString(string phrase, Case cases)
{
string[] splittedPhrase = phrase.Split(' ', '-', '.');
var sb = new StringBuilder();
if (cases == Case.CamelCase)
{
sb.Append(splittedPhrase[0].ToLower());
splittedPhrase[0] = string.Empty;
}
else if (cases == Case.PascalCase)
sb = new StringBuilder();
foreach (String s in splittedPhrase)
{
char[] splittedPhraseChars = s.ToCharArray();
if (splittedPhraseChars.Length > 0)
{
splittedPhraseChars[0] = ((new String(splittedPhraseChars[0], 1)).ToUpper().ToCharArray())[0];
}
sb.Append(new String(splittedPhraseChars));
}
return sb.ToString();
}
enum Case
{
PascalCase,
CamelCase
}
+1好方法,但它有點像用大炮射擊蚊子。儘管如此,即使只是讓OP重新考慮他/她的正則表達式的想法,它仍然是很好的和相關的信息。 :) – Bazzz
,如果你知道你的所有輸入字符串都在標題的情況下(如「朝鮮」),你可以簡單地做:
string input = "North Korea";
input = input.Replace(" ",""); //remove spaces
string output = char.ToLower(input[0]) +
input.Substring(1); //make first char lowercase
// output = "northKorea"
如果你的一些投入是不是在標題情況下,你可以使用TextInfo.ToTitleCase
string input = "NoRtH kORea";
input = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input);
input = input.Replace(" ",""); //remove spaces
string output = char.ToLower(input[0]) +
input.Substring(1); //make first char lowercase
// output = "northKorea"
String::Split
絕對是我的寵物小偷之一。此外,沒有其他的答案處理:
- 文化
- 所有形式的文字分隔符的
- 號
- 當它與文字分隔符開始會發生什麼
我試圖讓它儘可能接近基類庫代碼中的內容:
static string ToCamelCaseInvariant(string value) { return ToCamelCase(value, true, CultureInfo.InvariantCulture); }
static string ToCamelCaseInvariant(string value, bool changeWordCaps) { return ToCamelCase(value, changeWordCaps, CultureInfo.InvariantCulture); }
static string ToCamelCase(string value) { return ToCamelCase(value, true, CultureInfo.CurrentCulture); }
static string ToCamelCase(string value, bool changeWordCaps) { return ToCamelCase(value, changeWordCaps, CultureInfo.CurrentCulture); }
/// <summary>
/// Converts the given string value into camelCase.
/// </summary>
/// <param name="value">The value.</param>
/// <param name="changeWordCaps">If set to <c>true</c> letters in a word (apart from the first) will be lowercased.</param>
/// <param name="culture">The culture to use to change the case of the characters.</param>
/// <returns>
/// The camel case value.
/// </returns>
static string ToCamelCase(string value, bool changeWordCaps, CultureInfo culture)
{
if (culture == null)
throw new ArgumentNullException("culture");
if (string.IsNullOrEmpty(value))
return value;
var result = new StringBuilder(value.Length);
var lastWasBreak = true;
for (var i = 0; i < value.Length; i++)
{
var c = value[i];
if (char.IsWhiteSpace(c) || char.IsPunctuation(c) || char.IsSeparator(c))
{
lastWasBreak = true;
}
else if (char.IsNumber(c))
{
result.Append(c);
lastWasBreak = true;
}
else
{
if (result.Length == 0)
{
result.Append(char.ToLower(c, culture));
}
else if (lastWasBreak)
{
result.Append(char.ToUpper(c, culture));
}
else if (changeWordCaps)
{
result.Append(char.ToLower(c, culture));
}
else
{
result.Append(c);
}
lastWasBreak = false;
}
}
return result.ToString();
}
// Tests
' This is a test. 12345hello world' = 'thisIsATest12345HelloWorld'
'--north korea' = 'northKorea'
'!nOrTH koreA' = 'northKorea'
'System.Console.' = 'systemConsole'
string toCamelCase(string s)
{
if (s.Length < 2) return s.ToLower();
return Char.ToLowerInvariant(s[0]) + s.Substring(1);
}
與Paolo Falabella的代碼類似,但仍然存在空字符串和1個字符串。
這建立在Paolo Falabella的答案上作爲字符串擴展並處理一些邊界情況,如空字符串。由於CamelCase和camelCase之間存在一些混淆,我將其稱爲Wikipedia上描述的LowerCamelCase。我抵制了與nerdCaps合作的誘惑。
internal static string ToLowerCamelCase(this string input)
{
string output = "";
if(String.IsNullOrEmpty(input) == false )
{
output = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(input); //in case not Title Case
output = output.Replace(" ", ""); //remove any white spaces between words
if(String.IsNullOrEmpty(output) == false) //handles the case where input is " "
{
output = char.ToLower(output[0]) + output.Substring(1); //lowercase first (even if 1 character string)
}
}
return output;
}
用途:
string test = "Foo Bar";
test = test.ToLowerCamelCase();
... //test is now "fooBar"
更新: 統提出的意見好點 - 這不會對字形工作。查看toong提供的鏈接。如果你想調整上述的字形代碼,還有迭代字形here和here的例子。
嘗試以下操作:
var input = "Hi my name is Rony";
var subStrs = input.ToLower().Split(' ');
var output = "";
foreach(var s in subStrs)
{
if(s!=subStrs[0])
output += s.First().ToString().ToUpper() + String.Join("", s.Skip(1));
else
output += s;
}
應該得到 「hiMyNameIsRony
」 作爲輸出
- 1. 正則表達式在c中的正則表達式#
- 2. 「C:\\」的正則表達式
- 3. C中正數的正則表達式#
- 4. C/C++中的正則表達式庫
- 5. C#中的正則表達式選項和Visual Studio中的正則表達式
- 6. 正則表達式(正則表達式)
- 7. 正則表達式(正則表達式)
- 8. C#正則表達式分割和正則表達式
- 9. 正則表達式使用GNU C正則表達式庫
- 10. 將C#正則表達式轉換爲JavaScript正則表達式
- 11. C++正則表達式與提升正則表達式
- 12. Javascript正則表達式到c#正則表達式
- 13. C#正則表達式替換爲正則表達式
- 14. 用正則表達式分割一個camelCase字符串
- 15. CamelCase到Spaced Sentence案例正則表達式
- 16. Perl正則表達式可以匹配CamelCase單詞嗎?
- 17. 正則表達式C#
- 18. 正則表達式C#
- 19. 正則表達式Objective-c
- 20. 正則表達式C#IsMatch()
- 21. C++正則表達式
- 22. C#正則表達式
- 23. 正則表達式在C#
- 24. mongodb c#$正則表達式
- 25. C#正則表達式
- 26. 正則表達式C
- 27. 正則表達式/ C++
- 28. 子正則表達式C#
- 29. 正則表達式,C#
- 30. c正則表達式howto
爲什麼正則表達式?爲什麼不用空字符串替換所有空格並且用小寫字母替換第一個字符? – Bazzz