Как перевести string в string массив при последующей возможности редактирования?
Надо убрать данную ошибку CS0019: C# operator '==' cannot be applied to operands of type 'char' and 'string':
static readonly string[] signs = new[] { "0", "1", ... };
static void Main()
{
string word = ...;
for (var i = 0; i < word.Length; i++)
for (var j = 0; j < signs.Length; j++)
if (word[i] == signs[i]) // <- ошибка
{
word[i] = '\0';
break;
}
}
Ответы (1 шт):
Автор решения: return
Про пустой
→ Ссылка
Решение
Про пустой char
char не может быть пустым
А как же '\0' (его использую я), или default/*(char)*/, или просто /*(char)*/0 (пустой имеется ввиду значение по умолчанию).
RemoveInvalidChars
static readonly char[] invalidChars = new[] { /*...*/ };
// `ReadOnlySpan<char>` - ссылка #1
// `StringBuilder` я не рекомендую; используйте `ValueStringBuilder` (ссылки #2,3)
void RemoveInvalidChars(ReadOnlySpan<char> buffer, StringBuilder builder)
{
for (var i = 0; i < buffer.Length; i++)
{
var isValid = true;
foreach (var invalidChar in invalidChars)
if (buffer[i] == invalidChar[i])
{
isValid = false;
break;
}
if (isValid) builder.Append(buffer[i]);
}
}
RemoveInvalidSubstrings
static readonly string[] invalidSubtrings = new[] { /*...*/ };
void RemoveInvalidSubstirngs(ReadOnlySpan<char> buffer, StringBuilder builder)
{
for (var i = 0; i < buffer.Length; i++)
{
var isValid = true;
foreach (var invalidSubstring in invalidSubstrings)
if (buffer.Length - i >= invalidSubstring.Length &&
buffer.Slice(i, invalidSubstring.Length)
.Equals(invalidSubstring.AsSpan(), StringComparision.Ordinal))
{
isValid = false;
break;
}
if (isValid) builder.Append(buffer[i]);
}
}