2011-03-02 12 views
19

Por favor, perdona mi pereza. Podría entenderlo leyendo, lo sé, pero pensé que le daría a uno de ustedes, C# genios, la oportunidad de ganar algún representante.Encomienda cadena en C#

Tengo un archivo de datos en formato de archivo INI que necesita ser leído tanto con código C como con código C#. El código C espera que los valores de cadena estén rodeados por comillas. El código equivalente de C# está usando alguna clase subyacente o algo sobre lo que no tengo control, pero básicamente incluye las comillas como parte de la cadena de salida. Es decir. el contenido del archivo de datos de

MY_VAL="Hello World!" 

me da

"Hello World!" 

en mi # cadena de C, cuando realmente lo necesito para contener

Hello World! 

Cómo hacer yo condicional (en tener primero y último carácter siendo un ") eliminar las comillas y obtener los contenidos de cadenas que quiero.

Muchas gracias.

+0

años y años después y sigo recibiendo votos y distintivos (para muchos) en esta simple pregunta. ¡Maravilloso! Amo este sitio – AlastairG

Respuesta

51

En su utilización cadena Recorte con el "como char:

.Trim('"') 
6

generalmente llamo String.Trim() para tal fin:

string source = "\"Hello World!\""; 
string unquoted = source.Trim('"'); 
0

Si sabe que siempre habrá" al final y comienzo , esta sería la forma más rápida.

s = s.Substring(1, s.Length - 2); 
+0

La pregunta explícitamente dice "condicionalmente (al tener el primer y el último carácter como un") "lo que implica que no siempre hay una cita al principio y al final. – AlastairG

0

Utilice la función de reemplazo de cadena o la función de recorte. Si solo desea eliminar la primera y la última cita, use la función de subcadena.

string myworld = "\"Hello World!\""; 
string start = myworld.Substring(1, (myworld.Length - 2)); 
1

Basta con echar la cadena devuelta y hacer un Trim('"');

4

Mi aplicación сheck que las citas son de ambos lados

public string UnquoteString(string str) 
{ 
    if (String.IsNullOrEmpty(str)) 
     return str; 

    int length = str.Length; 
    if (length > 1 && str[0] == '\"' && str[length - 1] == '\"') 
     str = str.Substring(1, length - 2); 

    return str; 
} 
1

se recomienda usar el método replace().

string str = "\"HelloWorld\""; 
string result = str.replace("\"", string.Empty); 
+0

Si mi comprensión es correcta, esto también eliminará las comillas del medio del cadena. Tampoco es condicional sobre los primeros y los últimos caracteres que son comillas. – AlastairG

1

Ser obsesivo, aquí (que soy yo; no hay comentario acerca de usted), es posible que desee considerar

.Trim(' ').Trim('"').Trim(' ') 

de modo que cualquier, saltando fuera de los espacios de la cadena entre comillas se recortan, a continuación, la cita las marcas se eliminan y, finalmente, se eliminan todos los espacios delimitadores para la cadena contenida.

  • Si desea conservar el espacio en blanco delimitado y contenido, omita el .Trim final ('').
  • En caso de que haya espacios incrustados y/o comillas, se conservarán. Las posibilidades son, tales son deseadas y no deben ser eliminadas.
  • Haz un estudio sobre qué argumento no Trim() hace a cosas como alimentación de formularios y/o caracteres de tabulación, delimitadores e incrustados. Podría ser que uno y/o el otro Trim ('') debería ser solo Trim().
+0

Mejor aún, use esto: .Trim ('', '"') – jakobbg