我試圖獲取出現在某個字符之前的字串中的所有字符。
例如:
string id = "Hello everyone! Good day today.";
id = id.Remove(id.IndexOf('!'));
Console.WriteLine(id);
//output will be "Hello everyone"
這有效,但是當我從特殊檔案中讀取文本并處理包含特殊字符的字串時,我遇到了一些麻煩。
例如:
string id = "Hello everybody?1?9?&??"
如果我只想得到“大家好”文本,我該怎么做?這些特殊字符可以是任何東西。
uj5u.com熱心網友回復:
一種簡單的方法是指定允許的字符并使用Enumerable.TakeWhile
:
string id = "Hello everybody?1?9?&??";
string allowedChars = " abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
string result = string.Concat(id.TakeWhile(allowedChars.Contains)); // Hello everybody
或Regex
按此處所示使用(僅檢查是否有特殊字符)。
uj5u.com熱心網友回復:
嘗試這個:
string[] KeepCharacters = { "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"," ", "~","`","!","@","#","$","%","^","&","*","(",")","-","_"," ","=",@"\","|","}","]","{","[","'",":",";","/","?",".",">",",","<","1","2","3","4","5","6","7","8","9","0", Convert.ToString((char)34)};
string id = "Hello everybody?1?9?&??";
for(int i =0; i < id.Length; i )
{
if(KeepCharacters.Contains(id.Substring(i,1).ToLower()) == false)
{
id = id.Remove(i);
break;
}
}
uj5u.com熱心網友回復:
您可以創建一個添加到其中的擴展方法string
并根據需要使用它。
另請注意,我使用StringBuilder
它是因為它沒有在記憶體中創建新物件,而是動態擴展記憶體以容納修改后的字串(與通過常規字串連接進行對比,這可能會影響長字串的性能)
public static string GetRegularString(this string str) {
StringBuilder sb = new StringBuilder();
foreach (char c in str) {
if ((c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || c == '.' || c == '_' || c == ' ') {
sb.Append(c);
}
else{
break;
}
}
return sb.ToString();
}
uj5u.com熱心網友回復:
我調查了它,發現了我自己的解決方案,就像一個魅力
id = id.Remove(id.IndexOf(id.Where(x => !char.IsLetterOrDigit(x)).First()));
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/335590.html