Buna benzer bir çok başvuru buldum, ancak hiçbiri tam olarak neye benzediğimi göstermiyor, dolayısıyla birinin yardım edebileceğini umarak.
Basit bir şekilde, bir kullanıcı tarafından girilen (Winform girişine) bir dize almak ve önce herhangi bir boşluğu kesmek istiyorum, daha sonra 'yasadışı' karakterlerin herhangi birini Birleşik Krallık para birimi simgesiyle (£) değiştirin. Gereksinim, kullanılacak girdiye yöneliktir, ancak işlem tarafından oluşturulan dosyanın değiştirilmiş dosya adı vardır.
I (bir uzantısı yöntemine dayalı) bir fonksiyon yazdım ama beklendiği gibi oldukça çalışmıyor: C# bir karakter seçiminin her örneğini bir dizgede değiştirin
public static class ExtensionMethods
{
public static string Replace(this string s, char[] separators, string newVal)
{
var temp = s.Split(separators, StringSplitOptions.RemoveEmptyEntries);
return String.Join(newVal, temp);
}
}
public static string RemoveUnwantedChars(string enteredName, char[] unwanted, string rChar)
{
return enteredName.Replace(unwanted, rChar);
}
benim kodunda, iki kez aradım Hangi:
char[] blank = { ' ' };
string ename = Utilities.RemoveUnwantedChars(this.txtTableName.Text, blank, string.Empty);
char[] unwanted = { '(', ')', '.', '%', '/', '&', '+' };
string fname = Utilities.RemoveUnwantedChars(ename, unwanted, "£");
Ben girerseniz En az bir boşluk, yukarıdaki tüm karakterler ve diğer bazı harfler (örneğin, "(GH) F16.5% MX/Y & 1 + 1") içeren dize aşağıdaki sonuçları alır:
ename = " (GH) F16.5% MX/Y & 1 + 1 "- Bu doğru olduğundan boşlukları.
fname = "GH £ F16 £ 5 £ MX £ Y £ 1 £ 1" - Bu, ilk karakteri değiştirmediği, ancak kaldırdığı için düzgün çalışmadı.
Karakterlerin geri kalanı doğru şekilde değiştirildi. Yalnızca 'illegal' karakterlerden biri dizenin başında olduğunda oluşur - dizgem "G (H) F16.5% MX/Y & 1 + 1" ise, doğru şekilde "G £ H £" alırdım F16 £ 5 £ MX £ Y £ 1 £ 1" . Aynı zamanda birden fazla 'yasa dışı' karakteri bir '£' ile değiştirir, dolayısıyla "M() GX + .1", "M £ GX £ 1" olur, ancak "M ££ GX £ 1" olmalıdır.
https://dotnetfiddle.net/qjrgcc:
Olası bir çözüm
string.Join()
kullanmaktan kaçının ve bunun yerine böyleReplace()
yazmaktır – alextansc