Проверка и удаление любых символов в строке
Мне интересно, что было бы лучшим способом указать массив символов, например,
{
}
[
]
а затем проверьте строку для них и, если они там, полностью удалите их.
if (compiler.Parser.GetErrors().Count == 0)
{
AstNode root = compiler.Parse(phrase.ToLower());
if (compiler.Parser.GetErrors().Count == 0)
{
try
{
fTextSearch = SearchGrammar.ConvertQuery(root, SearchGrammar.TermType.Inflectional);
}
catch
{
fTextSearch = phrase;
}
}
else
{
fTextSearch = phrase;
}
}
else
{
fTextSearch = phrase;
}
string[] brackets = brackets = new string[]
{
"{",
"}",
"[",
"]"
};
string[] errorChars = errorChars = new string[]
{
"'",
"&"
};
StringBuilder sb = new StringBuilder();
string[] splitString = fTextSearch.Split(errorChars, StringSplitOptions.None);
int numNewCharactersAdded = 0;
foreach (string itm in splitString)
{
sb.Append(itm); //append string
if (fTextSearch.Length > (sb.Length - numNewCharactersAdded))
{
sb.Append(fTextSearch[sb.Length - numNewCharactersAdded]); //append splitting character
sb.Append(fTextSearch[sb.Length - numNewCharactersAdded - 1]); //append it again
numNewCharactersAdded++;
}
}
string newString = sb.ToString();
Ответы
Ответ 1
Регулярное выражение может сделать это гораздо проще:
var result = Regex.Replace(input, @"[[\]()]", "");
Использование набора символов ([...]
) для соответствия любому из символов в нем и замене ничем. Regex.Replace
заменит все соответствия.
Ответ 2
Другим кратким способом является Enumerable.Except
, чтобы получить заданную разницу в символах (если brackets
- символы):
String newString = new String(oldString.Except(brackets).ToArray());
Ответ 3
string str = "faslkjnro(fjrmn){ferqwe}{{";
char[] separators = new []{'[', ']','{','}' };
var sb = new StringBuilder();
foreach (var c in str)
{
if (!separators.Contains(c))
{
sb.Append(c);
}
}
return sb.ToString();
Ответ 4
Как насчет этого:
string myString = "a12{drr[ferr]vgb}rtg";
myString = myString.Replace("[", "").Replace("{", "").Replace("]", "").Replace("}", "");
В итоге получится:
a12drrferrvgbrtg
Ответ 5
Я не знаю, понимаю ли я вашу проблему, но вы можете решить свою проблему следующим образом:
string toRemove = "{}[]";
string result = your_string_to_be_searched;
foreach(char c in toRemove)
result = result.Replace(c.ToString(), "");
или с помощью метода расширения
static class Extensions
{
public static string RemoveAll(this string src, string chars)
{
foreach(char c in chars)
src= src.Replace(c.ToString(), "");
return src;
}
}
С помощью этого вы можете использовать string result = your_string_to_be_searched.RemoveAll("{}[]");
Ответ 6
string charsToRemove = @"[]{}";
string pattern = string.Format("[{0}]", Regex.Escape(charsToRemove));
var result = Regex.Replace(input, pattern, "");
Основное преимущество этого по сравнению с другими подобными ответами заключается в том, что вам не мешает определить, какие символы должны быть экранированы в RegEx; вы можете позволить библиотеке позаботиться об этом для вас.
Ответ 7
Вы можете сделать это довольно компактно, например:
string s = "ab{c[d]}";
char[] ca = new char[] {'{', '}', '[', ']'};
Array.ForEach(ca, e => s = s.Replace(e.ToString(), ""));
Или это:
StringBuilder s = new StringBuilder("ab{c[d]}");
char[] ca = new char[] {'{', '}', '[', ']'};
Array.ForEach(ca, e => s.Replace(e.ToString(), ""));