2011-07-28 13 views
8

Kullanıcıya görüntülenen dizeleri denetleyen bazı testlerim var.Dizgemin beyaz boşluktaki küçük farkları (duyarsızlık) duyarlı olmayanlarla karşılaştırmasını nasıl sağlayabilirim?

Sınamaların girintiler veya satır sonları vb. Değişikliklerden kaynaklanmamasını diliyorum. Bu yüzden bir dizgi gibi bir şey arıyorum.

  • Ignore ederken dize başlangıcında (kolay kullanım string.trim) olarak uzay
  • Ne zaman bir olsaydı aynı şekilde birbirlerine maçları yanındaki boşluk her türlü herhangi bir sayı tek boşluk.

Bir oluştur regex başlayabileceğini, ama başkası dolayısıyla daha iyi bir çözüm bu soruyu sahip olabilir.

cevap

6

Yazma özel bir bunu sadece boşluk için bunu yapmak gerekiyorsa zor olurdu karşılaştırın. I normalleştirmek için düzenli ifade kullanarak öneririm yani

private static readonly Regex normalizeSpace = 
     new Regex(@"\s+", RegexOptions.Compiled); 
... 
string s = normalizeSpace.Replace(input, " "); 

Açıkçası, normal olarak eşitlik işlenen ve daha sonra test hem normalize.

+0

Bunu yapmayı düşündüğüm şey buydu. –

+0

@ Ayrıca, PVitt'in cevabına eklediğim yorumu da görüyorum - "yeterince benzer" in tam kurallarına bağlıdır –

22

Sen CompareOptions kullanabilirsiniz:

String.Compare(a, b, CultureInfo.CurrentCulture, CompareOptions.IgnoreSymbols); 

Özü MSDN'den:

dize karşılaştırması böyle beyaz boşluk karakterleri, noktalama, para birimi sembolleri yüzde semboller, görmezden gerektiğini belirtir işaret, matematiksel semboller, ve işareti, vb.

+2

o var bilmiyordum şekilde aşağıdaki kullanabilirsiniz. Çok güzel, +1 – jglouie

+6

Sanırım "abc def" 'in "abcdef" e (bu sadece bitişik bir boşluk değişiminin * daha * olduğunu) ve "x + y" nin "x" değerinden farklı olup olmadığını y " –

+1

Bu kesinlikle ilginç olsa da, OP'nin talebi için uygun değildir. –

-1

Giriş dizesini hem başlangıçta hem de sonunda kırpan küçük bir işlev yazdım. Daha sonra çift boşlukları kontrol etmek için bir döngüye girer ve çift boşluklar olsa da, bunları birer birer değiştirir. Böylece sonunda sadece bir boşluk kalacaksın.

private static string RemoveSpaces(string input) 
{ 
    input = input.Trim(); 
    while (input.Contains(" ")) 
     input = input.Replace(" ", " "); 
    return input; 
} 

Bu yardımcı olur umarız!

+2

"beyaz boşluk" daha sonra sadece "" –

1

Ayrıca aşağıdaki özel fonksiyonu

 public static string ExceptChars(this string str, IEnumerable<char> toExclude) 
     { 
      StringBuilder sb = new StringBuilder(); 
      for (int i = 0; i < str.Length; i++) 
      { 
       char c = str[i]; 
       if (!toExclude.Contains(c)) 
        sb.Append(c); 
      } 
      return sb.ToString(); 
     } 

     public static bool SpaceInsenstiveComparision(this string stringa, string stringb) 
     { 
      return stringa.ExceptChars(new[] { ' ', '\t', '\n', '\r' }).Equals(stringb.ExceptChars(new[] { ' ', '\t', '\n', '\r' })); 
     } 

kullanmak Sonra

"Te st".SpaceInsenstiveComparision("Te st"); 
İlgili konular