Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, var olan stringbir öğesini değiştirerek bir string oluşturmak için çeşitli teknikler gösterilmektedir. Gösterilen tüm teknikler değişikliklerin sonucunu yeni string bir nesne olarak döndürür. Özgün ve değiştirilmiş dizelerin ayrı örnekler olduğunu göstermek için, örnekler sonucu yeni bir değişkende depolar. Her örneği çalıştırdığınızda özgün string ve değiştirilmiş string olan yeniyi inceleyebilirsiniz.
Bu makalede çeşitli teknikler gösterilmiştir. Varolan metni değiştirebilirsiniz. Desenleri arayabilir ve eşleşen metni başka bir metinle değiştirebilirsiniz. Bir dizeyi karakter dizisi olarak değerlendirebilirsiniz. Boşlukları kaldıran kullanışlı yöntemler de kullanabilirsiniz. Senaryonuza en yakın teknikleri seçin.
Metni değiştir
Aşağıdaki kod, var olan metni yerine başka bir metinle değiştirerek yeni bir dize oluşturur.
string source = "The mountains are behind the clouds today.";
// Replace one substring with another with String.Replace.
// Only exact matches are supported.
var replacement = source.Replace("mountains", "peaks");
Console.WriteLine($"The source string is <{source}>");
Console.WriteLine($"The updated string is <{replacement}>");
Yukarıdaki kod, dizelerin bu sabit özelliğini gösterir. Önceki örnekte özgün dize sourceolan öğesinin değiştirilmediğini görebilirsiniz.
String.Replace yönteminin, değişiklikleri içeren yeni bir string oluşturması.
Replace yöntemi dizeleri veya tek karakterleri değiştirebilir. Her iki durumda da, aranan metnin her oluşumu değiştirilir. Aşağıdaki örnek tüm ' ' karakterlerini '_' ile değiştirir:
string source = "The mountains are behind the clouds today.";
// Replace all occurrences of one char with another.
var replacement = source.Replace(' ', '_');
Console.WriteLine(source);
Console.WriteLine(replacement);
Kaynak dize değiştirilmez ve yerine yeni bir dize döndürülür.
Boşlukları kes
Öncesinde veya sonrasında bulunan boşlukları kaldırmak için, String.Trim, String.TrimStart, ve String.TrimEnd yöntemlerini kullanabilirsiniz. Aşağıdaki kodda her birinin bir örneği gösterilmektedir. Kaynak dize değişmez; bu yöntemler değiştirilmiş içeriklerle yeni bir dize döndürür.
// Remove trailing and leading white space.
string source = " I'm wider than I need to be. ";
// Store the results in a new string variable.
var trimmedResult = source.Trim();
var trimLeading = source.TrimStart();
var trimTrailing = source.TrimEnd();
Console.WriteLine($"<{source}>");
Console.WriteLine($"<{trimmedResult}>");
Console.WriteLine($"<{trimLeading}>");
Console.WriteLine($"<{trimTrailing}>");
Metni kaldırma
yöntemini kullanarak String.Remove dizeden metin kaldırabilirsiniz. Bu yöntem, belirli bir dizinden başlayarak belirtilen sayıda karakteri kaldırır. Aşağıdaki örnek, bir dizgeden metin kaldırmak için önce String.IndexOf ardından Remove öğesinin nasıl kullanılacağını göstermektedir.
string source = "Many mountains are behind many clouds today.";
// Remove a substring from the middle of the string.
string toRemove = "many ";
string result = string.Empty;
int i = source.IndexOf(toRemove);
if (i >= 0)
{
result= source.Remove(i, toRemove.Length);
}
Console.WriteLine(source);
Console.WriteLine(result);
Eşleşen desenleri değiştirme
Normal ifadeleri, metin eşleştirme desenlerini büyük olasılıkla bir desenle tanımlanan yeni metinle değiştirmek için kullanabilirsiniz. Aşağıdaki örnek, kaynak dizgede bir deseni bulup uygun harf büyük/küçük düzenine göre değiştirmek için System.Text.RegularExpressions.Regex sınıfını kullanır.
Regex.Replace(String, String, MatchEvaluator, RegexOptions) yöntemi, bağımsız değişkenlerinden biri olarak değiştirmenin mantığını sağlayan bir işlevi alır. Bu örnekte bu işlev, LocalReplaceMatchCase örnek yöntemi içinde bildirilen yerel bir işlevdir .
LocalReplaceMatchCase sınıfını System.Text.StringBuilder kullanarak uygun büyük harf kullanımıyla değiştirme dizesini oluşturur.
Normal ifadeler en çok bilinen metin yerine desene uygun metinleri aramak ve değiştirmek için kullanışlıdır. Daha fazla bilgi için bkz. Dizelerin Nasıl Aranacağı. "the\s" arama deseni, "the" sözcüğünü ve ardından boşluk karakterini arar. Desenin bu bölümü, kaynak metindeki "there" ile eşleşmemesini sağlar. Normal ifade dili öğeleri hakkında daha fazla bilgi için bkz. Normal İfade Dili - Hızlı Başvuru.
string source = "The mountains are still there behind the clouds today.";
// Use Regex.Replace for more flexibility.
// Replace "the" or "The" with "many" or "Many".
// using System.Text.RegularExpressions
string replaceWith = "many ";
source = System.Text.RegularExpressions.Regex.Replace(source, """the\s""", LocalReplaceMatchCase,
System.Text.RegularExpressions.RegexOptions.IgnoreCase);
Console.WriteLine(source);
string LocalReplaceMatchCase(System.Text.RegularExpressions.Match matchExpression)
{
// Test whether the match is capitalized
if (Char.IsUpper(matchExpression.Value[0]))
{
// Capitalize the replacement string
System.Text.StringBuilder replacementBuilder = new System.Text.StringBuilder(replaceWith);
replacementBuilder[0] = Char.ToUpper(replacementBuilder[0]);
return replacementBuilder.ToString();
}
else
{
return replaceWith;
}
}
Bu StringBuilder.ToString yöntemi, StringBuilder nesnesindeki içeriği ile değişmez bir dize döndürür.
Tek tek karakterleri değiştirme
Bir dizeden karakter dizisi oluşturabilir, dizinin içeriğini değiştirebilir ve ardından dizinin değiştirilmiş içeriğinden yeni bir dize oluşturabilirsiniz.
Aşağıdaki örnekte, bir dizedeki karakter kümesinin nasıl değiştirildiği gösterilmektedir. İlk olarak, bir karakter dizisi oluşturmak için String.ToCharArray() yöntemini kullanır. "tilki" sözcüğünün IndexOf başlangıç dizinini bulmak için yöntemini kullanır. Sonraki üç karakter farklı bir sözcükle değiştirilir. Son olarak, güncelleştirilmiş karakter dizisinden yeni bir dize oluşturulur.
string phrase = "The quick brown fox jumps over the fence";
Console.WriteLine(phrase);
char[] phraseAsChars = phrase.ToCharArray();
int animalIndex = phrase.IndexOf("fox");
if (animalIndex != -1)
{
phraseAsChars[animalIndex++] = 'c';
phraseAsChars[animalIndex++] = 'a';
phraseAsChars[animalIndex] = 't';
}
string updatedPhrase = new string(phraseAsChars);
Console.WriteLine(updatedPhrase);
Program aracılığıyla dize içeriği oluşturma
Dizeler sabit olduğundan, önceki örneklerin tümü geçici dizeler veya karakter dizileri oluşturur. Yüksek performanslı senaryolarda, bu yığın ayırmalarından kaçınılması tercih edilir. .NET, geçici dize ayırmalarından kaçınırken bir dizenin karakter içeriğini geri çağırma yoluyla programlı bir şekilde doldurmanıza olanak tanıyan bir yöntem sağlar String.Create.
// constructing a string from a char array, prefix it with some additional characters
char[] chars = [ 'a', 'b', 'c', 'd', '\0' ];
int length = chars.Length + 2;
string result = string.Create(length, chars, (Span<char> strContent, char[] charArray) =>
{
strContent[0] = '0';
strContent[1] = '1';
for (int i = 0; i < charArray.Length; i++)
{
strContent[i + 2] = charArray[i];
}
});
Console.WriteLine(result);
Sabit bir bloktaki bir dizeyi güvenli olmayan kodla değiştirebilirsiniz, ancak bir dize oluşturulduktan sonra dize içeriğini değiştirmek kesinlikle önerilmez. Bunun yapılması öngörülemeyen hatalara neden olur. Örneğin, birisi sizinkiyle aynı içeriğe sahip bir dizeyi hafızada paylaştırırsa, sizin kopyanızı alır ve dizenizi değiştiriyor olmanızı beklemezler.