0
votes

Pourquoi Trimendend () fonction de C # se comporte comme suit?

Un simple code de code est le suivant:

public static void Main()
{
    string str = "IsRecorded<code>0</code>";
    str = str.TrimEnd("<code>0</code>".ToCharArray());
    Console.WriteLine(str);
}


3 commentaires

Votre .tocharray précise que vous souhaitez supprimer tout le contenu après chaque charcuterie de votre chaîne. Donc, D est dans votre chaîne, alors il coupe après.


Si vous voulez l'équivalent moral de "Couper cette chaîne, mais seulement s'il se produit à la fin", vous pouvez utiliser regex.replace ("isRecorded 0 ", regex.escape (" 0 ") +" $ "," ") . (Il y a des alternatives plus efficaces, mais quelque chose d'optimisation prématurée.)


Dupliqué possible de Comportement étrange Trimend avec \ Char


4 Réponses :


6
votes

Le paramètre pour Trimend Spécifie l'ensemble de caractères pour être coupé. Ce n'est pas censé être un suffixe pour être coupé.

Vous dites donc que vous voulez couper n'importe quel caractère dans l'ensemble {'<', 'c', 'o' , 'd', 'e', ​​'>', '0', '/'} . Les lettres "dédiées" sont toutes dans cet ensemble, elles sont donc coupées.

Si vous souhaitez supprimer un suffixe, n'utilisez pas Trimend . Utilisez quelque chose comme ceci: xxx

(la partie de comparaison de chaîne est importante pour éviter des effets spécifiques à la culture "intéressants" dans certains cas. Il fait fondamentalement le match le plus simple possible.) < / p>


0 commentaires

0
votes

Essayez cela à la place:

        string str = "IsRecorded<code>0</code>";
        str = str.Substring(0, str.IndexOf("<code>0</code>"));
        Console.WriteLine(str);


2 commentaires

Notez que si " 0 " se produit plus d'une fois dans la chaîne, cela supprimera tout avant le premier d'entre eux. Cela peut être ou non ce que vous voulez ...


Bien sûr, ce n'est pas une solution finale, juste un moyen simple de faire ce qu'il pensait que la trimende. Votre solution est plus flexible.



1
votes

Vous pouvez utiliser .lastindexof () et supprimer () pour supprimer la chaîne qui est à l'extrémité xxx blockQuote>

.lastindexof (chaîne param): Cela trouvera index de la dernière occurrence de chaîne spécifiée.

.remove (int startindex): supprimer la chaîne de l'index donné


0 commentaires

0
votes

Une autre solution pourrait être la suivante:

string str = "IsRecorded<code>0</code>";
str = str.Replace("<code>0</code>", "");
Console.WriteLine(str);


0 commentaires