私は文字列を持っています
"[\"1,1\",\"2,2\"]"
この文字列をこれに変えたい
1,1,2,2
私はそのようなために置換機能を使用しています
obj.str.Replace("[","").Replace("]","").Replace("\\","");
しかし、期待される結果は返されません。助けてください。
私は文字列を持っています
"[\"1,1\",\"2,2\"]"
この文字列をこれに変えたい
1,1,2,2
私はそのようなために置換機能を使用しています
obj.str.Replace("[","").Replace("]","").Replace("\\","");
しかし、期待される結果は返されません。助けてください。
二重引用符を削除していません。以下を使用します。
obj.str = obj.str.Replace("[","").Replace("]","").Replace("\\","").Replace("\"", "");
文字列または除外文字のリストが長い場合の最適化されたアプローチを次に示します。
public static class StringExtensions
{
public static String RemoveAll(this string input, params Char[] charactersToRemove)
{
if(string.IsNullOrEmpty(input) || (charactersToRemove==null || charactersToRemove.Length==0))
return input;
var exclude = new HashSet<Char>(charactersToRemove); // removes duplicates and has constant lookup time
var sb = new StringBuilder(input.Length);
foreach (Char c in input)
{
if (!exclude.Contains(c))
sb.Append(c);
}
return sb.ToString();
}
}
次のように使用します。
str = str.RemoveAll('"', '[', ']', '\\');
// or use a string as "remove-array":
string removeChars = "\"{[]\\";
str = str.RemoveAll(removeChars.ToCharArray());
どうですか
var exclusions = new HashSet<char>(new[] { '"', '[', ']', '\\' });
return new string(obj.str.Where(c => !exclusions.Contains(c)).ToArray());
すべてを 1 回のスイープで行うこと。
Tim Schmelter が書いているように、特に長い文字列に対する大きな除外セットを頻繁に実行したい場合は、このような拡張を作成できます。
public static string Strip(
this string source,
params char[] exclusions)
{
if (!exclusions.Any())
{
return source;
}
var mask = new HashSet<char>(exclusions);
var result = new StringBuilder(source.Length);
foreach (var c in source.Where(c => !mask.Contains(c)))
{
result.Append(c);
}
return result.ToString();
}
あなたができるように、
var result = "[\"1,1\",\"2,2\"]".Strip('"', '[', ']', '\\');
この正規表現のみを使用して数字をキャプチャし[0-9]+
、一致を連結します。
var input = "[\"1,1\",\"2,2\"]";
var regex = new Regex("[0-9]+");
var matches = regex.Matches(input).Cast<Match>().Select(m => m.Value);
var result = string.Join(",", matches);