c# - txt - ¿Cómo eliminar nuevos caracteres de línea de una cadena?
quitar saltos de linea c# (10)
Tengo una cadena en el siguiente formato
string s = "This is a Test String./n This is a next line./t This is a tab./n''
Quiero eliminar todas las ocurrencias de /n
y /r
de la cadena de arriba.
He intentado con la string s = s.Trim(new char[] {''/n'', ''/r''});
pero no ayudó.
Bueno ... Me gustaría que entendieras áreas más específicas del espacio. /t
realidad está clasificado como un espacio horizontal, no como un espacio vertical. (pruebe insertar /t
en el Bloc de notas)
Si usa Java, simplemente use /v
. Ver la referencia a continuación.
/h
- Un carácter de espacio en blanco horizontal:
[/t/xA0/u1680/u180e/u2000-/u200a/u202f/u205f/u3000]
/v
- Un carácter de espacio en blanco vertical:
[/n/x0B/f/r/x85/u2028/u2029]
Pero soy consciente de que usas .NET. Entonces mi respuesta para reemplazar cada espacio vertical es ...
string replacement = Regex.Replace(s, @"[/n/u000B/u000C/r/u0085/u2028/u2029]", "");
Desea utilizar String.Replace
para eliminar un personaje.
s = s.Replace("/n", String.Empty);
s = s.Replace("/r", String.Empty);
s = s.Replace("/t", String.Empty);
Tenga en cuenta que String.Trim(params char[] trimChars)
solo elimina los caracteres trimChars
y finales en trimChars
de la instancia invocada.
Puede hacer un método de extensión, que evita los problemas de rendimiento de lo anterior al hacer muchas cadenas temporales:
static string RemoveChars(this string s, params char[] removeChars) {
Contract.Requires<ArgumentNullException>(s != null);
Contract.Requires<ArgumentNullException>(removeChars != null);
var sb = new StringBuilder(s.Length);
foreach(char c in s) {
if(!removeChars.Contains(c)) {
sb.Append(c);
}
}
return sb.ToString();
}
FYI,
Trim () hace eso ya.
La siguiente muestra de LINQPad:
void Main()
{
var s = " /rsdsdsdsd/nsadasdasd/r/n ";
s.Length.Dump();
s.Trim().Length.Dump();
}
Productos:
23
18
La elección correcta depende de cuán grande sea la cadena de entrada y cuáles sean los requisitos de memoria y fuerza, pero usaría una expresión regular como
string result = Regex.Replace(s, @"/r/n?|/n|/t", String.Empty);
O si necesitamos aplicar el mismo reemplazo varias veces, es mejor usar una versión compilada para el Regex como
var regex = new Regex(@"/r/n?|/n|/t", RegexOptions.Compiled);
string result = regex.Replace(s, String.Empty);
NOTA: diferentes escenarios requieren diferentes enfoques para lograr el mejor rendimiento y el mínimo consumo de memoria
Me gusta usar expresiones regulares En este caso, podrías hacer:
string replacement = Regex.Replace(s, @"/t|/n|/r", "");
Las expresiones regulares no son tan populares en el mundo .NET como lo son en los lenguajes dinámicos, pero proporcionan una gran cantidad de poder para manipular cadenas.
Puede usar Trim
si desea eliminar desde el inicio y el final.
string stringWithoutNewLine = "/n/nHello/n/n".Trim();
Sé que esta es una publicación anterior, sin embargo, pensé que compartiría el método que uso para eliminar nuevos caracteres de línea.
s.Replace(Environment.NewLine, "");
Referencias
MSDN String.Replace Method y MSDN Environment.NewLine Property
Si la velocidad y el uso de poca memoria son importantes, haga algo como esto:
var sb = new StringBuilder(s.Length);
foreach (char i in s)
if (i != ''/n'' && i != ''/r'' && i != ''/t'')
sb.Append(i);
s = sb.ToString();
Un enfoque LINQ:
string s = "This is a Test String./n This is a next line./t This is a tab./n''";
string s1 = String.Join("", s.Where(c => c != ''/n'' && c != ''/r'' && c != ''/t''));
solo haz eso
s = s.Replace("/n", String.Empty).Replace("/t", String.Empty).Replace("/r", String.Empty);