私はこれに類似する多くの参照を見つけましたが、まったく同じものはありませんので、誰かが助けてくれることを願っています。
簡単に言えば、ユーザーが入力した文字列をWinform入力に入力し、最初に空白を取り除き、「違法」文字のリストをイギリスの通貨記号(£)に置き換えます。要件は入力の使用ですが、プロセスによって生成されるファイルには変更されたファイル名があります。c#文字列内の文字選択の各インスタンスを置き換えます。
public static class ExtensionMethods
{
public static string Replace(this string s, char[] separators, string newVal)
{
var temp = s.Split(separators, StringSplitOptions.RemoveEmptyEntries);
return String.Join(newVal, temp);
}
}
public static string RemoveUnwantedChars(string enteredName, char[] unwanted, string rChar)
{
return enteredName.Replace(unwanted, rChar);
}
:
char[] blank = { ' ' };
string ename = Utilities.RemoveUnwantedChars(this.txtTableName.Text, blank, string.Empty);
char[] unwanted = { '(', ')', '.', '%', '/', '&', '+' };
string fname = Utilities.RemoveUnwantedChars(ename, unwanted, "£");
私が入力した場合、私は(拡張メソッドに基づく)関数を書きましたが、予想ほど働いていない
(GH)F16.5%MX/Y & 1 + 1 ")など、少なくとも1つの空白文字を含む文字列の場合、次の結果が得られます。
ename =" (GH)F16.5%MX/Y & 1 + 1 " - これは、空白。
fname = "GH£F16£5£MX££Y£1£1" - これは最初の文字を置き換えずに削除した点で正しく機能しませんでした。
残りの文字は正しく置き換えられました。私の文字列が "G(H)F16.5%MX/Y & 1 + 1"だった場合にのみ、「違法」文字の1つが文字列の先頭にある場合にのみ発生します。 F16£5£MX£££1£1 "となります。また、複数の「違法」文字を1つの「£」で置き換えるので、「M()GX + 1」は「M£GX£1」になりますが、「M££GX£1」になります。
https://dotnetfiddle.net/qjrgcc – alextansc