2016-03-22 24 views
0

これはおそらく愚かな質問ですが、大まかな検索では私に答えが与えられていません。私は文字列中の無効な文字を探しているところに問題があります。その中に改行文字やタブ文字などがあります。ただし、見つかった場合は、コンソールに出力されます。あなたが想像する通り、改行文字を「 n」文字列に変換する

"Character 
is invalid" 

が一目でチームを混乱させる可能性があります。 C#では、改行文字を文字列リテラルバージョン"\n"に変換するのに素早く簡単な方法がありますが、ではなく、は「特殊」でない無効な文字を変換しますか?ここで

は、私のコードの簡易版です:

プログラムが実行されている
using System.Text.RegularExpressions 
class Foo { 
    Regex invalidCheck = @"[^\w_ ]"; 

    public void ParseString(string command) { 
     var invalid = invalidCheck.Match(command) 
     if (invalid.Success) 
      Console.WriteLine("Invalid character " + invalid.Value) 
     else { 
      // Do things with the string... 
     } 
    } 
} 

、私はinvalid.Valueが実際あるかわからないが、私はに空白文字を変換するためにそれを取得する必要があります知っています何か読める。

+0

参照:

String x = "This has\na new line"; Console.WriteLine(x); String y = escp(x); Console.WriteLine(y); 

そして、あなたの場合のために、ちょうどescp機能でinvalid.Valueを囲みますstring.ReplaceまたはRegex.Replace(リテラルまたは正規表現)これはかなり動作します\ n "(スラッシュをスラッシュしたり、そのままの文字列を使用することを忘れないでください)、単一の\ n - > \ n" "直感的には、印刷できない/空白 - >エスケープされます。 – user2864740

+0

コードはどのように見えますか? –

+1

s = s.Replace( "\ r"、 "\" r \ "")。( "\ n"、 "\" \\ n \ ""); – rashfmnb

答えて

2

辞書を使用して、キーと値のペアをループすることができます。ここで

は一例です。

String escp(String x) { 
    Dictionary<String, String> replacements = new Dictionary<String, String>(); 
    replacements["\n"] = "\\n"; 
    replacements["\r"] = "\\r"; 
    replacements["\t"] = "\\t"; 
    foreach (var i in replacements) { 
     if(x.IndexOf(i.Key) > -1) 
      x = x.Replace(i.Key, i.Value); 
    } 
    return x; 
} 

あなたはこのように、これを使用することもできます。

Console.WriteLine("Invalid character " + escp(invalid.Value)); 
+0

私はこのアイデアが好きで、実際に問題を考えている間に心に浮かんだのですが、rashfmnbの回答のように私は盲目的になるように開いていて、ヘルパーメソッドを定義しなければなりません。私は組み込みメソッドがないのに驚いていますが、私はまだこの答えが好きです。 – BHustus

+0

まあ、質問には、どのようにして盲目的に見えないのですか?それぞれのリテラルを置き換えるためにそれぞれのリテラルを定義しなければなりません。 – Elipzer

+0

私は疑問を尋ねて私が望んでいたことは、組み込みの方法だと思います。この答えが受け入れられたとは考えても、何も表示されなければ。 – BHustus

1

このようにします。

s = s.Replace("\r", "\"\\r\"").Replace("\n", "\"\\n\""); 

またはあなたが拡張メソッド

public static class MyExtensions 
    { 
     public static int WordCount(this String str) 
     { 
      return str.Replace("\r", "\"\\r\"").Replace("\n", "\"\\n\""); 
     } 
    } 

を作成し、それを呼び出すと、あなたの要件ごとにそれを変換するために、無効な文字または文字列と同じくらいを追加することができます。

+0

これは、少ない関数呼び出しでこれを行う方法があるように感じますが、他に何も表示されない場合は、これが答えを得ると思います。 – BHustus

+0

さらに、この方法では、私が気づいていなかったものを含めることができなかった場合、私は盲目的になります。 – BHustus

関連する問題