Option pour ignorer la casse avec .contient de la méthode?
Est-il une option pour ignorer la casse avec .contains()
méthode?
J'ai un ArrayList
de DVD de l'objet. Chaque DVD objet a quelques éléments, l'un d'eux est un titre. Et j'ai une méthode qui permet de rechercher un titre spécifique. Il fonctionne, mais j'aimerais qu'il soit insensible à la casse.
- Non, il n'y en a pas. Mais si vous expliquez ce que vous êtes en train de faire, nous pouvons probablement suggérer une approche alternative qui ferait de ce que vous avez besoin.
- Pour effectuer la comparaison insensible à la casse en Java, vous pouvez utiliser
String.matches
avec une expression régulière.*(?i:abcd).*
. Remplacerabcd
avec votre chaîne. - double possible de Est la Méthode contains en java.lang.Chaîne sensible à la casse?
InformationsquelleAutor trama | 2013-04-05
Vous devez vous connecter pour publier un commentaire.
Je suppose que tu veux dire ignorant la casse lors de la recherche dans une chaîne de caractères?
Je ne sais pas tout, mais vous pouvez essayer de convertir la chaîne de caractères à rechercher dans les soit inférieure ou supérieure de l'affaire, puis sur rechercher.
Edit:
Comme Ryan Schipper suggéré, vous pouvez également (et sans doute serait mieux) ne seq.toLowerCase(), en fonction de votre situation.
seq.toLowerCase()
là aussi 😉toLowerCase()
à faire de comparaison sensible à la casse.toLowerCase
changé entre Java 6 et 7, voir stackoverflow.com/questions/23524231/... pourtoLowerCase
. Que faire si l'Ensemble contient "intervalOverlaps"? la mise en minuscules serait un échec.Si vous êtes à l'aide de Java 8
Ce n'est probablement pas la meilleure façon pour votre problème particulier, mais vous pouvez utiliser le
String.matches(String regex)
méthode ou le matcher équivalent. Nous avons juste besoin de construire une expression régulière à partir de votre éventuel titre. Ici, il devient complexe.Mais c'est inefficace, et qu'il se fait purement Java. Vous feriez mieux d'essayer l'une de ces techniques:
Collator
etCollationKey
classes.boolean matches(String fragment)
. Ont le DVD vous dire à quoi il correspond.title
colonne de laDVD
table de cette façon. L'utilisation de JDBC ou Hibernate ou JPA ou de source de Données, selon que vous choisissez.Apache Lucene
et, éventuellement,Apache Solr
.Si vous pouvez attendre jusqu'à ce que Java 8, l'utilisation des expressions lambda. Vous pouvez éviter le Pattern et Matcher classe que j'ai utilisé ci-dessus par la construction de l'expression régulière de cette façon:
Mais cette compile le motif de trop nombreuses fois. Qu'en est inférieur boîtier tout?
Félicitations; vous venez de découvrir le turc problème. À moins que vous l'état de la locale dans
toLowerCase
, Java trouve la locale courante. Et le bas du corps est lent car il doit prendre en compte le turc sans point i et parsemée I. Au moins vous n'avez pas de modèles et pas de rapprochement.Dans Java 8, vous pouvez utiliser l'interface de Flux:
Vous ne pouvez pas garantir que vous êtes toujours va obtenir
String
des objets, ou que l'objet que vous travaillez dans leList
met en œuvre un moyen d'ignorer la casse.Si vous ne souhaitez comparer
String
s dans une collection de quelque chose d'indépendant de cas, vous souhaitez effectuer une itération sur la collection et de les comparer sans cas.List<String>
, il le saura.String
méthode sur l'élément individuel dans laList
, mais pas sur leList
directement.La solution intuitive pour transformer les deux opérandes en minuscules (ou majuscules) a pour effet de l'instanciation d'un supplément de Chaîne d'objet pour chaque élément qui n'est pas efficace pour les grandes collections. Aussi, les expressions régulières sont un ordre de grandeur inférieure à celle des caractères simples de comparaison.
String.regionMatches()
permet de comparer deux chaînes de caractères régions de la casse manière. En l'utilisant, il est possible d'écrire une version efficace de la casse "contient" la méthode. La méthode suivante est ce que j'utilise; il est basé sur le code de Apache commons-lang:Pour Java 8, Vous pouvez avoir plus de solution, comme ci-dessous
Si vous êtes à la recherche pour le contient & pas des égaux, alors je voudrais vous proposons ci-dessous la solution.
Le seul inconvénient est que si votre searchItem ci-dessous la solution est "DE", puis aussi il pourrait correspondre à
Vous pouvez appliquer une petite astuce au cours de cette.
Changer toutes les cordes à même cas: soit supérieure ou minuscules
Pour Le Code C#:
Liste searchResults = sl.FindAll(s => s.ToUpper().Contient(seachKeyword.ToUpper()));
Pour Le Code Java: