2010-03-15 9 views
5

Tengo una cadena codificada de la que me gustaría recuperar un valor. Me doy cuenta de que puedo hacer algo de manipulación de cadenas (IndexOf, LastIndexOf, etc.) para sacar 12_35_55_219 de la cadena siguiente, pero me preguntaba si habría una manera más clara de hacerlo.Recuperar cadena desde el medio de una cadena

"AddedProject[12_35_55_219]0" 

Respuesta

6

Si usted puede estar seguro del formato de la cadena, a continuación, existen varias posibilidades:

Mi favorito es crear un tokenizer muy simple:

string[] arrParts = yourString.Split("[]".ToCharArray());

Dado que no hay un formato regular para la cadena, arrParts tendrá tres entradas, y la parte que le interese sería arrParts[1].

Si el formato de la secuencia varía, entonces deberá usar otras técnicas.

+1

+1 por no sugerir expresiones regulares. – Brian

+1

... de lo contrario tendría dos problemas, ¿verdad?) – kmontgom

+1

@Brian: ¿Por qué le temes a las expresiones regulares? – Guffa

4

Eso depende de cuánto puede variar la cuerda. Por ejemplo, puede utilizar una expresión regular:

string input = "AddedProject[12_35_55_219]0"; 
string part = Regex.Match(input, @"\[[\d_]+\]").Captures[0].Value; 
1

Hay dos métodos que pueden serle de utilidad, hay IndexOf y LastIndexOf con los corchetes como sus parámetros. Con un poco de investigación, debería poder sacar el número del proyecto.

5

Por lo tanto, en resumen, si tiene un patrón que puede aplicar a su cadena, lo más fácil es usar expresiones regulares, como por ejemplo de Guffa.

Por otro lado, tiene tokens diferentes todo el tiempo para definir el inicio y el final de la cadena, luego debe usar la combinación IndexOf y LastIndexOf y pasar los tokens como parámetro, haciendo que el ejemplo de Fredrik sea un poco más genérico:

string GetMiddleString(string input, string firsttoken, string lasttoken) 
{ 
    int pos1 = input.IndexOf(firsttoken) + 1; 
    int pos2 = input.IndexOf(lasttoken); 
    string result = input.Substring(pos1 , pos2 - pos1); 
    return result 
} 

Y esto es asumiendo que sus tokens solo suceden una vez en la cadena.

0

Aquí es una mejora con respecto a GetMiddleString de Wagner Silveira

string GetMiddleString(string input, string firsttoken, string lasttoken) 
    { 
     int pos1 = input.ToLower().IndexOf(firsttoken.ToLower()) + firsttoken.Length; 
     int pos2 = input.ToLower().IndexOf(lasttoken.ToLower());    
     return input.Substring(pos1 , pos2 - pos1); 
    } 

Y aquí cómo lo usa

string data = "AddedProject[12_35_55_219]0"; 
string[] split = data.Split("[]".ToCharArray()); 
rtbHelp.Text += GetMiddleString(data, split[0], split[2]).Trim("[]".ToCharArray());//print it to my C# winForm RichTextBox Help 
Cuestiones relacionadas