2009-03-31 20 views
13

C# ile yazılmış çok sayıda dize karşılaştırması yapan bir uygulamam var. Dizeler çeşitli kaynaklardan (kullanıcı girişi dahil) çekilir ve daha sonra karşılaştırılır. Bununla birlikte, '32' alanını boşluk olmayan alana '160' karşılaştırırken problemlerle karşılaşıyorum. Kullanıcıya aynı görünüyorlar ve böylece bir eşleşme bekliyorlar. Ancak uygulama karşılaştırdığında, hiçbir eşleşme yoktur.Dize Karşılaştırması, .NET ve bozulmasız alan

Bu konuda gitmenin en iyi yolu nedir? Kodun bütün parçalarına gitmek zorunda kalacağım, bu bir dizgi, boşlukları boşluklara göre karşılaştırıp manuel olarak normalleştiriyor? .NET bu konuda yardımcı olacak bir şey sunuyor mu? (Tüm karşılaştırma seçeneklerini denedim ama hiçbiri yardımcı olmadı.)

Alındıktan sonra dizeleri normalleştirdiğim ve dizge karşılaştırma yönteminin normalleştirilmiş dizeleri karşılaştırmasını sağladığım önerildi. Bunu yapmak için doğrudan doğruya emin olamayacağından emin değilim çünkü ilk etapta normalleştirilmiş bir dizedir. Bende ne normalleştiririm? Elbette, şimdilik kırılmayan alanları kırılma alanlarına dönüştürebiliyorum. Ama başka ne olabilir? Potansiyel olarak bu kuralların çokluğu olabilir mi? Hatta çatışıyor olabilirler. (Bir durumda, bir kuralı kullanmak istiyorum ve başka birimde yok.)

+0

Sen fazla bilgi ekleyebilir veya açıklamaktan kendi sorunuzu düzenleyebilirsiniz. –

cevap

9

Eğer ben olsaydım, dizeleri 'çektiğim gibi' normalleştirirdim '; muhtemelen bir string.Replace() ile. O zaman karşılaştırmalarınızı başka bir yerde değiştirmeniz gerekmez.

Edit: Mark, bu zor olanı. Gerçekten size ya da siz müşterilere 'normalleştirilmiş' bir ipin ne olduğuna bağlı.

 
I have 4 apples. 
I have four apples. 

aslında eşit: Müşteri dizeleri gibi talep nerede benzer bir durumda oldum. Farklı durumlar için ayrı normalleştiricilere ihtiyacınız olabilir. Her iki durumda da, orijinal dizgelerin geri alınması üzerine normalleştirme yapardım.

+0

Ben smame yapardım. –

+0

Evet, string'leri dize çağıran kendi fonksiyonunuzla ilgilendiğiniz şeylere normalize ederdim. – NoahD

+0

guys Bu önerilen cevaba bir takip sorusu veya bir açıklama sorusu nasıl gönderirim? Burada mı yaparım? Bu sadece 255 karaktere izin veriyor – Mark

29

Bu basit cevabı bulmak için çok fazla acı çektim. Aşağıdaki kod, normal boşluklarla kesilmeyen alanları değiştirmek için düzenli bir ifade kullanır. Bu yardımcı olur

string cellText = "String with non breaking spaces."; 
cellText = Regex.Replace(cellText, @"\u00A0", " "); 

Umut Dan

Ben orijinal olanlardan birini uzanır kendi dize karşılaştırıcısı oluşturarak öneririm
+10

@, çıkış karakterini çalışmayı durdurmuyor mu? CellText.Replace ("\ u00A0", "") olmasın mı? – jpmcclung

+8

@jpmcclung evet. Http://msdn.microsoft.com/en-us/library/system.string.aspx adresindeki "Char Nesneleri ve Unicode Karakterleri" konusuna bakın. FWIW, cellText.Değiştir ('\ u00A0', '') 'daha hızlı (http://www.dotnetperls.com/replace-performance) – Arithmomaniac

+2

FYI - cellText.Replace (@" \ u00A0 "," ") çalışmadı. Regex.Replace (cellText, @ "\ u00A0", ""); gitmek için yol gibi görünüyor. – gpmurthy

1

- orada "normalleşme" do (normal boşluk olmayan boşluk değiştirin) . Örnek Equals yöntemine ek olarak, bir karşılaştırıcı alan bir statik String.Equals var.

0

regex olmadan aynı çoğunlukla kendim için daha sonra ihtiyacınız olduğunda:

text.Replace(' ', '\u00A0')

İlgili konular