Comment pouvons-nous couper un StringBuilder
valeur sans les frais généraux causés par l'utilisation StringBuilder.toString().trim()
et créant ainsi un nouveau String
et / ou un nouveau StringBuilder
par exemple pour chaque appel de trim?
Réponses:
18 pour la réponse № 1Pourquoi StringBuilder n’a pas de méthode trim ()
- Parce que c'est ainsi qu'il a été conçu. Essayez de demander aux concepteurs.
- Parce qu'il n'y a pas grand chose à réclamer.
- Parce que la chaîne
trim()
la sémantique et la signature ne conviennent pas aux chaînes modifiables, bien que cela soit discutable.
Quoi qu'il en soit, la réponse n'est pas pertinente pour résoudre votre problème.
et comment pouvons-nous couper une valeur StringBuilder?
Le moyen le plus simple est d'utiliser StringBuilder.toString().trim()
...
Je ne veux pas utiliser StringBuilder.toString (). Trim ().
Dans ce cas, vous devez donc faire quoi trim()
fait sous les couvertures: faire correspondre et supprimer les espaces blancs avant et arrière. Étant donné que l'API StringBuilder ne prend pas en charge l'expression régulière, vous devrez le faire de cette manière difficile, c'est-à-dire en itérant les caractères d'avant en avant et de fin en arrière pour voir quels caractères doivent être supprimés, etc.
Êtes-vous sûr que vous ne préféreriez pas le faire facilement? Sinon, ce Q&R a quelques exemples d'implémentations, d'analyse, de benchmarking, etc.:
En fait, je suis dans une boucle où je dois comparercette chaîne StringBuilder avec de nombreuses autres valeurs, donc si j'appelle StringBuilder.toString (). trim () à chaque fois, cela créera une nouvelle instance et je ne veux pas créer un nouvel objet String à chaque fois.
Le revers de la médaille est que la suppression de caractères au début d'un StringBuilder implique la copie de tous les caractères restants.
Peut-être que vous feriez mieux de transformer le StringBuilder complet en une chaîne pour commencer, puis lorsque vous utilisez trim()
et substring()
et autres, vous ne copiez pas de caractères. (Ces méthodes fonctionnent en créant une nouvelle chaîne qui actions le tableau de sauvegarde de la chaîne d'origine ... de sorte que vous finissez par copier les informations de contrôle de la chaîne. METTRE À JOUR - Dans Java 7, ils ont changé le comportement de trim
et substring
afin qu'ils utilisent un constructeur String qui copie un sous-tableau du tableau de support.)
3 pour la réponse № 2
Je ne sais pas ce que vous essayez de réaliser, mais si vous êtes préoccupé par les performances, vous pouvez peut-être effectuer le découpage en ajoutant le StringBuilder.
stringbuilder.append(string.trim())
1 pour la réponse № 3
Pourquoi StringBuilder n’a-t-il pas de méthode trim ()?
Hmm .. StringBuilder
est comme String
, juste une petite différence qu'il peut être modifié après la création sinon c'est la même chose que la chaîne.
Comme indiqué dans le lien ci-dessus, Les principales opérations sur un StringBuilder sont les méthodes d'ajout et d'insertion. Je suppose qu'ils sont proposés pour supporter des chaînes mutables, comme avec StringBuffer
. Et si vous pouvez faire avancer les choses par un petit appel à une autre méthode, puis à la méthode souhaitée, quel est le problème. Pourquoi vous voulez la même implémentation dans plusieurs classes.
Comment pouvons-nous couper une valeur StringBuilder?
Comme l'ont dit d'autres stringBuilder.toString().trim();
Je ne veux pas utiliser
StringBuilder.toString().trim()
.
Hmm ... question de choix, une raison spécifique à cela?
1 pour la réponse № 4
Utilisation StringBuilder.toString().trim()
mais enregistrez-le dans une variable.
Par exemple:
String myTrimmedString = myStringBuilder.toString().trim();
Il n'a pas de trim()
car il est très facile et quelque peu préférable d'utiliser des objets immuables. Imaginez un fil coupe le StringBuilder
tandis qu'un autre y est ajouté. Imaginez les bugs et l'étrangeté qui pourraient provoquer dans votre code.
0 pour la réponse № 5
Vous pouvez convertir StringBuilder
par exemple à string
qui plus tard peut être coupé.
sb.toString().trim();//sb is stringBuilder Instance.