J'ai une chaîne au format suivant
string s = "This is a Test String.\n This is a next line.\t This is a tab.\n'
Je veux supprimer toutes les occurrences de \n
et \r
de la chaîne ci-dessus.
J'ai essayé string s = s.Trim(new char[] {'\n', '\r'});
mais cela n'a pas aidé.
J'aime utiliser des expressions régulières. Dans ce cas, vous pourriez faire:
string replacement = Regex.Replace(s, @"\t|\n|\r", "");
Les expressions régulières ne sont pas aussi populaires dans le monde .NET que dans les langages dynamiques, mais elles offrent beaucoup de pouvoir pour manipuler des chaînes.
Vous voulez utiliser String.Replace
pour supprimer un caractère.
s = s.Replace("\n", String.Empty);
s = s.Replace("\r", String.Empty);
s = s.Replace("\t", String.Empty);
Notez que String.Trim(params char[] trimChars)
supprime uniquement les caractères de début et de fin dans trimChars
de l'instance invoquée le.
Vous pouvez créer une méthode d’extension, ce qui évite les problèmes de performances liés à la création de nombreuses chaînes temporaires:
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();
}
Je sais que ceci est un ancien post, mais je pensais partager la méthode que j'utilisais pour supprimer les caractères de nouvelle ligne.
s.Replace(Environment.NewLine, "");
Références:
MSDN String.Replace, méthode et Propriété MSDN Environment.NewLine
Si la vitesse et l’utilisation réduite de la mémoire sont importantes, procédez comme suit:
var sb = new StringBuilder(s.Length);
foreach (char i in s)
if (i != '\n' && i != '\r' && i != '\t')
sb.Append(i);
s = sb.ToString();
fais juste ça
s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty);
Une approche 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'));
Eh bien ... j'aimerais que vous compreniez des domaines d'espace plus spécifiques. \t
correspond en fait à un espace horizontal et non à un espace vertical. (test en insérant \t
dans le Bloc-notes)
Si vous utilisez Java, utilisez simplement \v
. Voir la référence ci-dessous.
\h
- Un caractère blanc horizontal:
[\t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000]
\v
- Un caractère d'espacement vertical:
[\n\x0B\f\r\x85\u2028\u2029]
Mais je suis conscient que vous utilisez .NET. Donc, ma réponse au remplacement de chaque espace vertical est ..
string replacement = Regex.Replace(s, @"[\n\u000B\u000C\r\u0085\u2028\u2029]", "");
Le bon choix dépend vraiment de la taille de la chaîne d'entrée et des exigences en matière de mémoire et de force, mais j'utiliserais une expression régulière telle que
string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty);
Ou si nous devons appliquer le même remplacement plusieurs fois, il est préférable d’utiliser une version compilée pour Regex telle que
var regex = new Regex(@"\r\n?|\n|\t", RegexOptions.Compiled);
string result = regex.Replace(s, String.Empty);
REMARQUE: différents scénarios requièrent différentes approches pour obtenir les meilleures performances et la consommation de mémoire minimale.