Puede usar de forma segura el carácter que desee como delimitador, si escapa de la cadena para que sepa que no contiene ese carácter.
Vamos, por ejemplo, a elegir el carácter 'a' como delimitador. (Escogí intencionalmente un carácter habitual para mostrar que se puede usar cualquier carácter).
Usa el carácter 'b' como código de escape. Reemplazamos cualquier ocurrencia de 'a' con 'B1' y cualquier ocurrencia de 'b' con 'b2':
private static string Escape(string s) {
return s.Replace("b", "b2").Replace("a", "b1");
}
Ahora, la cadena no contiene ningún 'a' caracteres, lo que puede poner varios de esas cadenas juntas:
string msg = Escape("banana") + "a" + Escape("aardvark") + "a" + Escape("bark");
la cadena ahora se ve así:
b2b1nb1nb1ab1b1rdvb1rkab2b1rk
ahora se puede dividir la cadena en 'a' y conseguir las piezas individuales:
b2b1nb1nb1
b1b1rdvb1rk
b2b1rk
para decodificar las partes que la sustitución hacia atrás:
private static string Unescape(string s) {
return s.Replace("b1", "a").Replace("b2", "b");
}
Así que la división de la cuerda y unencoding las partes se hace así:
string[] parts = msg.split('a');
for (int i = 0; i < parts.length; i++) {
parts[i] = Unescape(parts[i]);
}
O usando LINQ:
string[] parts = msg.Split('a').Select<string,string>(Unescape).ToArray();
Si elige un carácter menos común como delimitador, hay, por supuesto, menos apariciones eso se escapará El punto es que el método se asegura de que el carácter sea seguro de usar como delimitador sin hacer suposiciones sobre qué caracteres existen en los datos que desea poner en la cadena.
¿Hay alguna razón por la que etiquetó esto con * C# *? No veo ninguna razón por la cual esto deba estar relacionado con el lenguaje. –
Al realizar una operación de cadena en .NET WinForm, '\ 0' es un carácter terminador cuando se trata de controles de formulario. –