2016-03-22 36 views
0

Bu muhtemelen aptalca bir sorudur, ancak bazı lanetli aramalar bana yanıt vermemiştir. Bir dizede geçersiz karakterler aradığım bir sorunum var; aralarında yeni satır karakterleri, sekme karakterleri ve benzerleri bulunur. Ancak, biri bulunduğunda, bir konsola yazdırır; Tahmin edebileceğiniz gibi, bir bakışta ekibi karıştırabilir. Bu yüzden, C# satırında yeni satır karakterini "\n" dizgisine dönüştürmek için hızlı ve kolay bir yol var, ancak 'özel' olmayan geçersiz karakterleri dönüştürecek mi? İşte Yeni satır karakterini " n" dizesine dönüştürme

benim kod basitleştirilmiş versiyonu:

program çalışırken
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... 
     } 
    } 
} 

, ben invalid.Valueaslında olduğunu bilmiyorum, ama ben içine boşluk karakterlerini dönüştürmek için bunu elde etmek gerek biliyorum okunabilir bir şey.

+0

See: sadece escp fonksiyonu ile invalid.Value çevreleyen,

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

Ve dava için:

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; } 

Böyle kullanabiliriz: Burada

bir örnektir string.Replace veya Regex.Referans edebilecek çok (normal veya düzenli ifade) tek bir \ n -> "\ n" için eğik çizgi (eğik çizgiyi kesmeyi veya bir harf yazmayı kullanın), ancak daha ilginç olan yazdırılamaz/boşluklu -> kaçtı. – user2864740

+0

Kodunuz neye benziyor? –

+1

s = s.Replace ("\ r", "\" \\ r \ "") Değiştir ("\ n", "\" \\ n \ ""); – rashfmnb

cevap

2

Bir sözlük kullanabilir ve anahtar/değer çiftleri arasında geçiş yapabilirsiniz.

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

Bu düşünceyi beğeniyorum ve problem üzerinde düşünürken aklıma geldi, ama rashfmnb'nin cevabı gibi, bana kör bir bakış açımı açabilir ve aynı zamanda beni bir yardımcı yöntem tanımlamaya zorluyor. Yerleşik bir yöntem olmadığına şaşırdım ama yine de bu cevabı beğeniyorum. – BHustus

+0

Sorun şu ki, nasıl “kör” görünmüyorsunuz, her bir harfin yerini değiştirmek için tanımlayın. – Elipzer

+0

Sanırım, soruyu yerleşik bir yöntem olarak sorduğumu umuyordum. Bunun için bir şey ortaya çıkmazsa, bu cevabı kabul etmeyi düşünün. – BHustus

1

bunu beğendi.

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

veya uzatma yöntemini

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

oluşturmak ve diyoruz ve sizin şartının olarak dönüştürmek için olduğu kadar geçersiz karakter veya dize ekleyebilir.

+0

Daha az işlev çağrısı ile bunu yapmanın bir yolu olmalı, ancak başka bir şey ortaya çıkmazsa, sanırım bu yanıtı alır. – BHustus

+0

Artı, bu yöntem, var olmadığımı fark etmediğim bir şeyi dahil edemediğimde, körelmiş olmamı sağlar. – BHustus