Est-il une telle chose comme un caractère générique dans Java?
Je suis en cours d'exécution d'un programme de comparaison et à la minute, il fait un direct " chaîne de caractères chaîne de comparaison et si elles sont exactes, il les sorties qu'ils sont un match.
Bien, j'ai été en espérant pour ajouter une fonctionnalité supplémentaire qui a permis 'similitude'...
ainsi, par exemple:
String em1 = "52494646";
String em2 = "52400646";
if (em1.equals(em2)){
output.writeUTF(dir + filenames[i]);
}
C'est en quelque sorte un extrait du code. J'aimerais qu'il sorte qu'il saute sur le "00" et toujours le reconnaît comme "presque" le même nombre et encore sorties.
J'imagine qu'il ressemblerait à quelque chose comme String em2 = "524"+ ## +"646"
mais c'est évidemment un concept
Personne ne sait si il existe un moyen pour avoir ce genre de "générique" (un terme que j'ai ramassé à partir de uni SQL) ou si il y a une autre façon de faire de cette similitude type d'affaire.
Merci 🙂
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser des expressions régulières:
Pattern
classe.Vous pouvez résoudre facilement à l'aide d'expressions régulières:
par exemple.
(Le
.
est un caractère générique qui désigne n'importe quel caractère. Vous pouvez le remplacer avec\\d
si vous souhaitez restreindre le caractère générique de chiffres.)Ici est plus général de la variante qui correspond à "0" à l'encontre de tout caractère:
Je pense que le problème avec ladite RE solution est que vous n'êtes pas intéressé dans les nombres qui sont identiques, mais pour la 3ème ou 4ème position, mais dans les chiffres qui sont identiques, mais pour un/deux chiffres.
Qui est un peu plus imbriquer problème, mais en gros, vous voulez calculer le http://en.wikipedia.org/wiki/Hamming_distance pour votre deux chaînes. Bien algorithme connu pour beaucoup de problèmes, donc vous devriez trouver beaucoup d'exemples, mais j'ai peur de la bibliothèque standard ne va pas le faire. C'est aussi une boucle for et un compteur, de sorte que vous ne devriez pas avoir de problèmes avec une mise en œuvre - vous perdre du potentiel d'optimisation de la STL peut utiliser (en comparant les adresses des deux chaînes et vous devez comparer l'ensemble de la chaîne dans les deux cas), mais pas beaucoup plus.
Habituellement, vous pouvez faire une combinaison de startsWith, endsWith, ou contient de trouver si une Chaîne de commencer, se termine par ou contient une autre chaîne. Vous pouvez l'utilise en combinaison comme
À l'aide d'une expression régulière est susceptible d'être un meilleur choix 95% du temps, mais il est plus cher.
Expressions régulières serait la façon dont vous voulez le faire. Pour votre exemple, vous voulez quelque chose comme
"524\\d{2}646"
. Voir la API Java pour les Regex.Voir également la durée de Apache Commons IO bibliothèque ici, car il semble que vous faites affaire avec des fichiers: https://commons.apache.org/proper/commons-io/javadocs/api-release/index.html?org/apache/commons/io/package-summary.html
Vous devez utiliser Les Expressions Régulières pour cela.
Bien, malheureusement, je crois que apache commons StringUtil n'ont pas de caractère générique de l'opération.
Si je me souviens bien, il y a un StringUtils classe JDBC mysql connector qui a une méthode pour comparer des chaînes de caractères avec des caractères génériques.
-Ou -
Vous pouvez essayer d'utiliser certains fuzz logic: http://jfuzzylogic.sourceforge.net/html/index.html
Pourquoi les gens sont réticents à écrire un simple & direct algorithme?
Si vous êtes à la recherche d'une façon différente d'exprimer un caractère générique, ici, c'est une option: