Longueur de la chaîne sans utiliser la méthode length ()
Comment puis-je trouver la longueur d'une Chaîne sans l'aide de la length()
méthode de la classe String?
source d'informationauteur Rahul
Vous devez vous connecter pour publier un commentaire.
str.toCharArray().length
devrait fonctionner.Ou que diriez-vous:
str.lastIndexOf("")
Même, probablement, s'exécute en temps constant 🙂
Un autre
L'une des plus stupides solutions:
str.split("").length - 1
Est-ce de la triche:
new StringBuilder(str).length()
? 🙂Puisque personne ne l'a posté la coquine porte arrière de façon encore:
😉
Vous pouvez utiliser une boucle pour vérifier chaque position de caractère et attraper le
IndexOutOfBoundsException
quand vous passez le dernier caractère. Mais pourquoi?Note: Ceci est très la mauvaise programmation de la pratique et très inefficace.
Vous pouvez utiliser la réflexion pour examiner les variables internes dans le
String
classe, plus précisémentcount
.Juste pour compléter cela avec le plus stupide de la méthode, je peux venir avec: Générer tous les possible des chaînes de longueur 1, l'utilisation est égale à comparer à la chaîne d'origine; si elles sont égales, la longueur de la chaîne est 1. Si aucune chaîne correspond à, de générer tous les possible des chaînes de longueur 2, de les comparer, pour la longueur de la chaîne 2. Etc. Continuer jusqu'à ce que vous trouver la longueur de la chaîne ou de l'univers se termine, ce qui arrive en premier.
essayer de code ci-dessous
Pour les demi-meilleures méthodes ont été affichés, et il n'y a rien de mieux que String#longueur...
Rediriger Système.un FileOutputStream, l'utilisation du Système..print (pas println()!) pour imprimer la corde et obtenir la taille du fichier, ce qui est égal à la longueur de la chaîne. N'oubliez pas de restaurer le Système.après la mesure.
😉
Caché longueur() utilisation:
Voici une autre façon:
Dans le même esprit (bien que beaucoup moins efficace):
Ou encore:
C'est un programme complet qui vous permet de compiler et de l'exécuter.
Juste pour être complet (et ce n'est pas du tout recommandé):
Cela fonctionne parce qu'un
char
est un code UTF-16 de l'unité, etstr.length()
retourne le nombre de ces unités de code. Chaque code UTF-16 unité occupe 2 octets, donc on divise par 2. En outre, il n'y a pas de marque d'ordre d'octet écrit avec de l'UTF-16BE.Nous pouvons itérer à travers la chaîne comme un tableau de caractères, et à compter de cette façon (beaucoup plus terre-à-terre façon de faire):
À l'aide de la "foreach" version de la boucle for
Encore plus lent
Ou même plus lent,
Très agréable solutions. Voici un peu plus.
Ici est une version récursive:
Et encore plus
Comment ai-je pu oublier un qui fonctionne réellement dans un délai raisonnable? (Chaîne de caractères#longueur est toujours préférable.)