Comment puis-je compter le nombre de caractères dans une chaîne de caractères? - Mise à jour
Par exemple, la chaîne "abc" devrait donner les 3 personnages uniques, tandis que la chaîne "abcccd" donnerait 4 personnages. Je ne suis pas autorisé à utiliser la Carte, table de hachage, TreeMap, Ensemble, HashSet, StringBuffer ou TreeSet dans ce.
Jusqu'à présent, je suis en train d'utiliser une boucle for, mais quand je lance le programme, j'obtiens 0 caractères uniques. Je suis un peu nouveau à Java, donc je n'ai vraiment aucune idée de ce que je suis en train de faire.
Edit: j'ai donc modifié le code et je suis arriver à un résultat, mais il finit par être 1 de moins que ce que je veux. Je vais taper " abc " et le résultat viendra comme "2 caractères uniques", au lieu de trois. De compteur que j'ai mis (uniqueChars + 1) dans la println déclaration. Est-ce une bonne correction? Si l'utilisateur met rien, il va encore dire qu'il y a 1 caractère unique.
Code mis à jour:
userText = userText.toLowerCase(); //userText is declared earlier in the program
//as the user's input. Setting this to lowercase
//so it doesn't say "a" and "A" are two different
//characters.
int uniqueChars = 0;
for (int i = 0; i < lengthText-1; i++) { //lengthText is declared earlier
//as userText.length();
if (userText.charAt(i) != userText.charAt(i+1))
uniqueChars++;
}
System.out.println("there are " + (uniqueChars + 1) + " unique characters in your string.");
}
La boucle s'exécute, il me donne juste la réponse incorrecte. Si je tape "abc", le programme retourne 0 caractères uniques au lieu de 3. J'ai aussi essayé de mettre "i < lengthText" dans la boucle et qui me donne encore la mauvaise réponse.
OriginalL'auteur newJavaUser | 2014-03-25
Vous devez vous connecter pour publier un commentaire.
C'est ce que je suis venu avec:
Je viens de vérifier les index de chaque personnage, et si c'est différent de l'indice d'origine, il y a plusieurs occurrences.
Dire si String s = "abcbc"; Votre méthode de retour de 3 au lieu de 1 à droite ? Bcoz indexOf() renvoie toujours l'index à l'intérieur de cette chaîne de la première occurrence du caractère spécifié. Ainsi, pour la première occurence il ne serait pas détecter les doublons de char qui se produit plus tard dans la Chaîne
Oui, exactement.
Exactement ce que je dis est, cette solution ne fonctionne pas, comme il enregistrera également la première occurence du caractère unique, même si il y a des doublons, plus tard dans la Chaîne de
Mais c'est prévu. Lire le post original de nouveau.
OriginalL'auteur Veluria
Comment à ce sujet? C'est une regex solution plutôt que d'une boucle:
Si le programme doit être sensible à la casse, vous pouvez l'utiliser à la place:
Vous pourrait faire cela une seule méthode de ligne avec
return input.replaceAll(...).length();
Regex Explique:
.
correspond à tout caractère(...)
crée une capture d'un groupe, d'être référencé par la suite(?=...)
crée une anticipation, de regarder vers l'avant à l'entrée.*?
correspond à quoi que ce soit entre le personnage et son match (non-greedy matching)\\1
correspond à la première capture d'un groupe(?i)
définit la casse drapeauDonc, la regex recherchera n'importe quel caractère qui a deux plus loin dans la chaîne, puis
replaceAll
va le remplacer par la chaîne vide. Ainsi, une entrée comme"cabbacbdbadbcabdaadcb"
devient"adcb"
(en gardant le dernier de chaque caractère unique). Puis, avec une chaîne de caractères contenant des caractères uniques, que la longueur de la chaîne est la réponse.Si, pour une raison quelconque, vous avez besoin d'une unique chaîne de caractères et vous en avez besoin, dans l'ordre d'origine, vous devez inverser la chaîne d'origine avant de le dépouiller des personnages en double (et puis d'inverser à nouveau lorsque vous avez terminé). Cela nécessiterait une bibliothèque tierce,
StringBuffer
, ou d'une boucle.OriginalL'auteur Brian S
Vous pourriez faire un nouveau
String
, appeléuniqueChars
et l'initialiser à""
. Itérer sur les personnages dans leString
vous êtes à la vérification. SiuniqueChars.contains(charToCheck)
estfalse
, puis ajouter à ce personnageuniqueChars
. À la fin de la boucle,uniqueChars.length()
vous indique le nombre de caractères uniques que vous aviez. C'est moche et inefficace, mais il devrait fonctionner.OriginalL'auteur Mike B
utiliser un
ArrayList
et ajouter un charactar si pas déjà là:OriginalL'auteur Christopher Francisco
Voici le programme pour savoir comment écrire un fichier, comment lire le même fichier, et comment compter le nombre de fois que le personnage en particulier, a répété:
OriginalL'auteur Yogi
Utilisation d'un vecteur.
Ensuite, pour chaque lettre, incrémenter la position dans le vecteur. Si toutes les entrées ont un compteur est supérieure à 1, alors vous avez répète
utilisation
c - 'A'
(ou tout ce qui est jugé approprié pour le résultat souhaité) pour l'index. Toutefois, le tableau devrait être de plus de 26 éléments, sauf si seules les lettres sont utilisées et le chèque n'est pas sensible à la casse/entrée est garanti d'être dans un cas. Avec zéro restrictions sur ce qui est permis dans la chaîne de caractères, la taille de la matrice aurait à 65535 (moins de 26 si le programme est insensible à la casse).En fait, la boucle spécifique affiché est d'aller à maintes reprises
letters[0]
être'\0'
. Vous devez utiliser une normalefor
boucle pour initialiser les valeurs par défaut (même si c'est pas nécessaire, carchar
est un type primitif). Faire le tableau d'uneint[]
serait mieux pour le comptage des doublons, ouboolean[]
si nombre de différentes lettres, c'est tout ce qui est nécessaire.OriginalL'auteur Alexandre Santos
Comment le mettre dans un tableau, les trier par ordre alphabétique, puis appliquer votre logique(en comparant adjacents)?
Par ailleurs, votre programme ne fonctionne pas parce que vous ne
i == lengthText-1
dans votre boucle for.OriginalL'auteur George Irimiciuc
Même logique avec @Alexandre Santos, mais avec des exemples de codes. La complexité est O(N).
Fonctionne uniquement avec les alphabétique chaîne de caractères sans espace, numériques ou caractères spéciaux.
Cela peut également être utilisé comme comptage de tri.
OriginalL'auteur Wonil
OriginalL'auteur thripura
OriginalL'auteur Kiran Patil