2009-09-26 52 views

Respuesta

7
myString = myString.Substring(0,myString.IndexOf(',')); 
+1

¿no debería ser myString.IndexOf? – dove

+0

¡Uy! ¡Si gracias! :-) –

+0

También lanzará una excepción ArgumentOutOfRange si la cadena no contiene una coma. –

3
string NoComma = ""; 
string example = "text before first comma, more stuff and another comma, there"; 
string result = example.IndexOf(',') == 0 ? NoComma : example.Split(',')[0]; 
+0

¿Por qué no usar simplemente example.Split (',') [0] por sí mismo? – thecoop

+0

@thecoop esto sería si quisieras controlar lo que resultaría si no hubiera coma en el ejemplo, la pregunta no fue explícita al respecto. increíble cuanta variación se puede obtener en los requisitos más triviales ... – dove

+0

gracias, ¿cómo puedo hacerlo con múltiples comas? Quiero guardar todas las palabras entre las comas. Alina – alina

36
substring = str.Split(',')[0]; 

Si str no contiene ninguna coma, subcadena será el mismo que str.

EDITAR: al igual que con la mayoría de las cosas, el rendimiento de esto variará en los casos extremos. Si hay muchas y muchas comas, esto creará muchas instancias String en el montón que no se usarán. Si se trata de una cadena de 5000 caracteres con una coma cerca del inicio, el método IndexOf + Substring funcionará mucho mejor. Sin embargo, para cadenas razonablemente pequeñas este método funcionará bien.

+2

Sí, la clave no necesita verificar nada. –

+0

+1 de mí también. Buena solución. –

+2

Tenga en cuenta que esto es increíblemente ineficiente para grandes cadenas que contienen una coma cerca de su comienzo. 'String.IndexOf' se detendrá cuando encuentre la primera coma. 'String.Split' siempre pasará por la cadena _entire_. Considera "¡Hola, mundo! Tengo un largo cuento que contarte". + [6000 caracteres más] + "¡Espero que lo hayas disfrutado!". Ese es un gran factor de desaceleración que tienes allí. – Joren

8

Puede usar IndexOf() para averiguar dónde está la coma, y ​​luego extraer la subcadena. Si está seguro de que siempre tendrá la coma, puede omitir el cheque.

 string a = "asdkjafjksdlfm,dsklfmdkslfmdkslmfksd"; 
     int comma = a.IndexOf(','); 
     string b = a; 
     if (comma != -1) 
     { 
      b = a.Substring(0, comma); 
     } 
     Console.WriteLine(b); 
4

Alina, en función de lo que escribió anteriormente, entonces Split funcionará para usted.

string[] a = comment.Split(','); 

Dado su cadena de ejemplo, a continuación, a [0] = "AAA", una [1] = "bbbbb", un [2] = "cccc", y una [3] = "dddd"

+0

Hola Ian, Gracias, esto me ayudó :) – alina

10
var firstPart = str.Split(new [] { ',' }, 2)[0] 

El segundo parámetro indica la cantidad máxima de piezas. La especificación de 2 garantiza que el rendimiento sea correcto incluso si hay muchas y muchas comas.

+1

Buena respuesta pero el formato no es correcto (al menos en .NET 4.0). .Split requiere una matriz de caracteres en este caso. es decir 'var firstPart = str.Split (new char [] {'{'}, 2);' – Grax

+0

@Grax gracias, lo he solucionado. FYI, no necesitas 'char', el compilador inferirá el tipo de matriz para ti. –

Cuestiones relacionadas