2011-05-12 31 views
11

Entonces, lo que estoy tratando de hacer es tomar un número de trabajo, que se ve así xxx123432, y contar los dígitos en la entrada, pero no las letras . Quiero asignar la cantidad de números a una variable y usar esa variable para verificar los números de trabajo para determinar si están en un formato válido.¿Cómo puedo contar los números en una cadena de texto/números mixtos?

Ya he descubierto cómo realizar el control, pero no tengo ni idea de cómo contar los números en el número del trabajo.

Muchas gracias por su ayuda.

+0

¿Necesita calcular '1 + 2 + 3 + 4 + 3 + 2'? ¿O contar una cantidad de números (6)? ¿O que? – abatishchev

+0

Necesito contar la cantidad de números. – OneFreeFitz

Respuesta

27

mediante LINQ:

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

o

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

@ mathieu- Además de la sintaxis, ¿cuál es la diferencia real entre estos dos? – MAW74656

+0

@ MAW74656: sin diferencias de comportamiento. los primeros usan un predicado declarado (es decir, una función que toma 1 arg del tipo char y devuelve bool) y el segundo usa directamente la función – mathieu

2

¿Algo como esto tal vez?

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

Y se podría utilizar LINQ, así:

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

o

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

La diferencia entre estos dos métodos ver en Char.IsDigit y Char.IsNumber.

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

Esto da como resultado el número 234 si eso es lo que necesita.

Las otras variantes de linq/lambda solo cuentan caracteres que creo que no son del todo correctos si tiene una cadena como "B2B_MESSAGE_12344", ya que contaría los 2 en B2B.

Pero no estoy seguro si entendí correctamente qué significa la cantidad de números. Es el conteo de números (otras respuestas) o el número que forman los números (esta respuesta).

+0

. Creo que debería haber sido más claro al respecto. Estaba buscando la cantidad de números, pero de todos modos gracias por tu respuesta. – OneFreeFitz

Cuestiones relacionadas