2011-05-12 9 views
11

Yapmaya çalıştığım şey, bu xxx123432'ye benzeyen bir iş numarası almak ve girdideki rakamları saymak, ancak harfleri değil . Daha sonra bir sayıya bir değişkene atamak ve geçerli bir formatta olup olmadıklarını belirlemek için iş numaralarına karşı bir kontrol sağlamak için bu değişkeni kullanmak istiyorum.Numaraları karışık metin/sayı dizisinde nasıl sayabilirim

Denetimi nasıl gerçekleştireceğimi zaten öğrendim, ancak iş numarasındaki sayıları saymakla ilgili nasıl bir ipucum yok.

Yardımlarınız için teşekkürler çok teşekkürler.

+0

'1 + 2 + 3 + 4 + 3 + 2' öğesini hesaplamanız mı gerekiyor? Ya da sayıları saymak (6)? Ya da ne? – abatishchev

+0

Sayıların sayısını saymam gerekiyor. – OneFreeFitz

cevap

27

LINQ:

var count = jobId.Count(x => Char.IsDigit(x)); 

veya

var count = jobId.Count(Char.IsDigit); 
+0

@ mathieu- Söz diziminin yanı sıra, bu ikisi arasındaki gerçek fark nedir? – MAW74656

+0

@ MAW74656: davranışsal farklılık yok. birincisi, bildirilmiş bir yüklemi kullanır (örneğin, char türünde 1 arg alır ve bool döndürür) ve ikincisi doğrudan – mathieu

2

Böyle bir şey olabilir mi?

string jobId = "xxx123432"; 
int digitsCount = 0; 
foreach(char c in jobId) 
{ 
    if(Char.IsDigit(c)) 
    digitsCount++; 
} 

Ve böyle LINQ, kullanabilirsiniz: kullanma

string jobId = "xxx123432"; 
int digitsCount = jobId.Count(c => char.IsDigit(c)); 
4
int x = "xxx123432".Count(c => Char.IsNumber(c)); // 6 

ya da bu iki yöntem arasındaki

int x = "xxx123432".Count(c => Char.IsDigit(c)); // 6 

fark Char.IsDigit ve Char.IsNumber de bakın. Bu neye ihtiyacınız olup olmadığını

0
string str = "t12X234"; 
    var reversed = str.Reverse().ToArray(); 
    int digits = 0; 

    while (digits < str.Length && 
      Char.IsDigit(reversed[digits])) digits++; 

    int num = Convert.ToInt32(str.Substring(str.Length - digits)); 

Bu çıkış olarak num 234 verir.

Diğer linq/lambda varyantları, "B2B_MESSAGE_12344" gibi bir diziniz varsa tam olarak doğru olmadığını düşündüğüm karakterleri saymaktadır, çünkü bu, 2'yi B2B olarak sayacaktır.

Ama sayıların kaçının doğru olduğunu anladığımdan emin değilim. Sayıların sayısı (diğer cevaplar) veya sayıların (bu cevap) oluşturduğu sayıdır.

+0

işlevini kullanır, sanırım daha açık olmalıydım. Sayıların sayısını arıyordum, ama cevabın için zaten teşekkürler. – OneFreeFitz