文字列を検索し、特定の文字列を置き換える必要があります
例: 検索文字列「テキスト ボックスに文字列を追加」。「追加」を「挿入」に置き換えます
期待される出力 = "テキスト ボックスに追加の文字列を挿入"
文字列を使用する場合 s="テキスト ボックスに追加文字列を追加".replace("追加","挿入");
出力結果=「挿入文字列をテキストボックスに挿入」
期待される出力を得るためにこれを機能させるためのアイデアを持っている人はいますか?
ありがとうございました!
文字列を検索し、特定の文字列を置き換える必要があります
例: 検索文字列「テキスト ボックスに文字列を追加」。「追加」を「挿入」に置き換えます
期待される出力 = "テキスト ボックスに追加の文字列を挿入"
文字列を使用する場合 s="テキスト ボックスに追加文字列を追加".replace("追加","挿入");
出力結果=「挿入文字列をテキストボックスに挿入」
期待される出力を得るためにこれを機能させるためのアイデアを持っている人はいますか?
ありがとうございました!
これを行うには、正規表現を使用できます。
拡張方法の例:
public static class StringExtensions
{
public static string SafeReplace(this string input, string find, string replace, bool matchWholeWord)
{
string textToFind = matchWholeWord ? string.Format(@"\b{0}\b", find) : find;
return Regex.Replace(input, textToFind, replace);
}
}
使用法:
string text = "Add Additional String to text box";
string result = text.SafeReplace("Add", "Insert", true);
結果:「追加の文字列をテキストボックスに挿入」
string pattern = @"\bAdd\b";
string input = "Add Additional String to text box";
string result = Regex.Replace(input, pattern, "Insert", RegexOptions.None);
「\bAdd\b」は、他の単語の一部ではない「Add」と一致することを保証します。お役に立てば幸いです。
回答:
「@ で始まる単語を置き換える必要がある場合、この解決策は機能しません。ここでフィドル dotnetfiddle.net/9kgW4h このシナリオでこれを機能させるにはどうすればよいですか。 – Frenz 16 1 月 . 172017 年 1 月 16 日 5:46 に」
可能な解決策:
public static string SafeReplace(this string input, string find, string replace, bool matchWholeWord) {
string searchString = find.StartsWith("@") ? $@"@\b{find.Substring(1)}\b" : $@"\b{find}\b";
string textToFind = matchWholeWord ? searchString : find;
return Regex.Replace(input, textToFind, replace);
}
//Find and Replace A word in c#
public static class Program
{
public static string Replace(this String str, char[] chars, string replacement)
{
StringBuilder output = new StringBuilder(str.Length);
bool replace = false;
if (chars.Length - 1 < 1)
{
for (int i = 0; i < str.Length; i++)
{
char c = str[i];
replace = false;
// int val = Regex.Matches(ch.ToString(), @"[a-zA-Z]").Count;
for (int j = 0; j < chars.Length; j++)
{
if (chars[j] == c)
{
replace = true;
break;
}
}
if (replace)
output.Append(replacement);
else
output.Append(c);
}
}
else
{
int j = 0;
int truecount = 0;
char c1 = '\0';
for (int k = 0; k < str.Length; k++)
{
c1 = str[k];
if (chars[j] == c1)
{
replace = true;
truecount ++;
}
else
{
truecount = 0;
replace = false;
j = 0;
}
if(truecount>0)
{
j++;
}
if (j > chars.Length-1)
{
j = 0;
}
if (truecount == chars.Length)
{
output.Remove(output.Length - chars.Length+1, chars.Length-1);
// output.Remove(4, 2);
if (replace)
output.Append(replacement);
else
output.Append(c1);
}
else
{
output.Append(c1);
}
}
}
return output.ToString();
}
static void Main(string[] args)
{
Console.WriteLine("Enter a word");
string word = (Console.ReadLine());
Console.WriteLine("Enter a word to find");
string find = (Console.ReadLine());
Console.WriteLine("Enter a word to Replace");
string Rep = (Console.ReadLine());
Console.WriteLine(Replace(word, find.ToCharArray(), Rep));
Console.ReadLine();
}
}
別の単語内の対応ではなく、完全な単語のみを置き換えたい場合は、次のようにすることができます。
// add a leading and tail space
string tmp = " " + "Add Additional String to text box"+ " ";
// replace the word you want, while adding a lead and tail space, and then Trim
tmp = tmp.Replace(" Add ", " Insert ").Trim();
今はテストできませんが、うまくいくかもしれません。
メソッドを使用しstring.Replace(string old, string replacement)
ます。
string input = "Add Additional String to text box";
string output = input.replace("Add ", "Insert ");
output == "Insert Additional String to text box" // true
より高い柔軟性が必要な場合は RegEx を使用しますが、正確な文字列を置き換えたい場合は string.replace メソッドで十分です。