/ / Comment couper la chaîne de StringBuilder? [fermé] - java, c #

Comment couper la chaîne de StringBuilder? [fermé] - java, c #

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 № 1

Pourquoi StringBuilder n’a pas de méthode trim ()

  1. Parce que c'est ainsi qu'il a été conçu. Essayez de demander aux concepteurs.
  2. Parce qu'il n'y a pas grand chose à réclamer.
  3. 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.

StringBuilder

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.