Büyük Harfler önce boşluk Ekle
Verilen string "ThisStringHasNoSpacesButİtDoesHavecapitals" büyük harflerin önce boşluk eklemek için en iyi yolu nedir. Son dize olur "Bu Dize Boşluk Var Ama Başkentleri Var"
Burada bir Düzenli ifade ile benim girişimi
System.Text.RegularExpressions.Regex.Replace(value, "[A-Z]", " $0")
CEVAP
Bu yukarıdaki diyagram iyi (hatta Martin Browns cevap oy) çalışacak, ama pahalı (ve kişisel olarak herhangi bir desen birkaç karakter daha uzun engelleyici kalın kafalı buluyorum
Bu işlev
string AddSpacesToSentence(string text, bool preserveAcronyms)
{
if (string.IsNullOrWhiteSpace(text))
return string.Empty;
StringBuilder newText = new StringBuilder(text.Length * 2);
newText.Append(text[0]);
for (int i = 1; i < text.Length; i )
{
if (char.IsUpper(text[i]))
if ((text[i - 1] != ' ' && !char.IsUpper(text[i - 1])) ||
(preserveAcronyms && char.IsUpper(text[i - 1]) &&
i < text.Length - 1 && !char.IsUpper(text[i 1])))
newText.Append(' ');
newText.Append(text[i]);
}
return newText.ToString();
}
2,968,750 keneler içinde 100,000 kez yapacak, düzenli 25,000,000 keneler (ve düzenli derlenmiş thats) alacak.
Daha fazla kod korumak için değil ancak daha iyi, daha hızlı, yani belirli bir değer için. "Daha iyi" sık sık rekabet şartları uzlaşmadır.
Umarım bu yardımcı olur :)
Güncelleme
Bu baktım bu yana epey uzun zaman oldu, ve ben sadece zamanlama kodu değiştiğinden beri güncellenmemiş (sadece biraz değişti) fark etti.
Bir dize ile 'Abbbbbbbbb' tekrarlanan 100 kere (yani 1.000 bayt), 100.000 dönüşüm alır el kodlu işlevi 4,517,177 kene ve normal ifade altına alır 59,435,719 yapma kodlu El fonksiyonu Çalıştır 7.6% zaman alır normal ifade.
Güncelleme 2 Dikkate Kısaltmalar sürer? Olacak şimdi! Eğer ifade, bu mantığı bu genişleyen gördüğünüz gibi oldukça karanlık
if (char.IsUpper(text[i]))
if (char.IsUpper(text[i - 1]))
if (preserveAcronyms && i < text.Length - 1 && !char.IsUpper(text[i 1]))
newText.Append(' ');
else ;
else if (text[i - 1] != ' ')
newText.Append(' ');
... bir faydası yok!
Orijinali buradabasityöntem bu Kısaltmalar dert değil
string AddSpacesToSentence(string text)
{
if (string.IsNullOrWhiteSpace(text))
return "";
StringBuilder newText = new StringBuilder(text.Length * 2);
newText.Append(text[0]);
for (int i = 1; i < text.Length; i )
{
if (char.IsUpper(text[i]) && text[i - 1] != ' ')
newText.Append(' ');
newText.Append(text[i]);
}
return newText.ToString();
}
Javascript ile harfler büyük dize dönü...
Nasıl SQL Server için büyük bir tablo ...
C harfler büyük için dize dönüştürme#...
Hücre (td) css kullanarak arasındaki b...
Boşluk (&; " quot;) Ekle bir öğe k...