javacontains⼤⼩写_使⽤.contains⽅法忽略⼤⼩写的选项?
14 个答案:
答案 0 :(得分:54)
如果您使⽤的是Java 8
List list = new ArrayList<>();
boolean containsSearchStr = list.stream().anyMatch("search_value"::equalsIgnoreCase);
答案 1 :(得分:27)
我猜你的意思是在⽤字符串搜索时忽略⼤⼩写?
我不知道,但您可以尝试将字符串转换为搜索到较低或⼤写,然后搜索。
// s is the String to search into, and seq the sequence you are searching for.
bool doesContain = s.toLowerCase().contains(seq);
编辑:
正如Ryan Schipper建议的那样,你也可以(也可能会更好)做LowerCase(),具体取决于你的情况。
答案 2 :(得分:12)
private boolean containsIgnoreCase(List list, String soughtFor) {
for (String current : list) {
if (current.equalsIgnoreCase(soughtFor)) {
return true;
}
}
return false;
}
答案 3 :(得分:4)
这可能不是解决您的特定问题的最佳⽅法,但您可以使⽤String.matches(String regex)⽅法或匹配器。我们只需要从您的预期标题中构建⼀个正则表达式。这⾥很复杂。
List matchingDvds(String titleFragment) {
String escapedFragment = Pattern.quote(titleFragment);
// The pattern may have contained an asterisk, dollar sign, etc.
// For example, M*A*S*H, directed by Robert Altman.
Pattern pat = Patternpile(escapedFragment, Pattern.CASE_INSENSITIVE);
List foundDvds = new ArrayList<>();
for (DVD dvd: catalog) {
Matcher m = pat.Title());
foundDvds.add(dvd);
}
}
return foundDvds;
}
但这是低效的,⽽且它纯粹是⽤Java完成的。你最好尝试其中⼀种技术:
了解Collator和CollationKey课程。
如果您别⽆选择,只能留在Java世界中,请向DVD添加⽅法boolean matches(String fragment)。让DVD告诉你它匹配的内容。
使⽤数据库。如果它⽀持不区分⼤⼩写的排序规则,则以此⽅式声明title表的DVD列。使⽤JDBC或Hibernate或JPA或Spring Data,⽆论您选择哪种。
如果数据库⽀持⾼级⽂本搜索,例如Oracle,请使⽤它。
回到Java世界,使⽤Apache Lucene,可能还有Apache Solr。
使⽤针对不区分⼤⼩写的匹配项调整的语⾔。
醇>
如果您可以等到Java 8,请使⽤lambda表达式。你可以通过这种⽅式构建正则表达式来避免我上⾯使⽤的Pattern和Matcher类:
String escapedFragment = Pattern.quote(titleFragment);
String fragmentAnywhereInString = ".*" + escapedFragment + ".*";
String caseInsensitiveFragment = "(?i)" + fragmentAnywhereInString;
// and in the loop, use:
Title().matches(caseInsensitiveFragment)) {
foundDvds.add(dvd);
}
但是这种模式编译的次数太多了。低层套管怎么样?
if (Title().toLowerCase().LowerCase()))
恭喜;你刚刚发现了⼟⽿其问题。除⾮您在toLowerCase中说明语⾔环境,否则Java会到当前的语⾔环境。并且下壳很慢,因为它必须考虑⼟⽿其⽆点我和点缀I.⾄少你没有图案,也没有匹配。
答案 4 :(得分:3)
在Java 8中,您可以使⽤Stream接⼝:
return dvdList.stream().anyMatch(d -> d.getTitle().equalsIgnoreCase("SomeTitle"));
答案 5 :(得分:2)
将两个操作数转换为⼩写(或⼤写)的直观解决⽅案具有为每个项⽬实例化额外String对象的效果,这对⼤型集合⽆效。此外,正则表达式⽐简单字符⽐较慢⼀个数量级。
public static boolean containsIgnoreCase(final String str, final String searchStr) {
if (str == null || searchStr == null) {
return false;
}
final int len = searchStr.length();
final int max = str.length() - len;
for (int i = 0; i <= max; i++) {
if (ionMatches(true, i, searchStr, 0, len)) {
return true;
}
}
return false;
}
答案 6 :(得分:2)
您⽆法保证始终会获得String个对象,或者您在List中使⽤的对象实现了忽略⼤⼩写的⽅法。
如果您确实希望将集合中的String与独⽴于案例的内容进⾏⽐较,您需要迭代集合并进⾏⽐较,⽆需⼤⼩写。String word = "Some word";
List aList = new ArrayList<>(); // presume that the list is populated
for(String item : aList) {
if(word.equalsIgnoreCase(item)) {
// operation upon successful match
}
}
答案 7 :(得分:0)
private List FindString(String stringToLookFor, List arrayToSearchIn)
{
List ReceptacleOfWordsFound = new ArrayList();
if(!arrayToSearchIn.isEmpty())
{
for(String lCurrentString : arrayToSearchIn)
{
UpperCase().UpperCase()) ReceptacleOfWordsFound.add(lCurrentString);
}
return ReceptacleOfWordsFound;
}
答案 8 :(得分:0)
对dvdList和您的searchString进⾏空检查
if (!StringUtils.isEmpty(searchString)) {
return Optional.ofNullable(dvdList)
.map(Collection::stream)
.pty())
.anyMatch(dvd >searchString.Title()));
}
答案 9 :(得分:0)
我知道我参加聚会有点晚了,但是在Kotlin中,您可以轻松使⽤:
java怎么编写ainsIgnoreCase(item: String) = any {
it.equals(item, ignoreCase = true)
}
val list = listOf("Banana")
ains("banana"))
ainsIgnoreCase("BaNaNa"))
答案 10 :(得分:0)
Kotlin开发⼈员,请选择any / none
private fun compareCategory(
categories: List?,
category: String
) = categories?.any { it.equals(category, true) } ?: false
答案 11 :(得分:0)
如果您正在寻包含&不等于然后我会提出以下解决⽅案。
唯⼀的缺点是,如果您在以下解决⽅案中的searchItem是“ DE”,那么它也会匹配List list = new ArrayList<>();
public static final String[] LIST_OF_ELEMENTS = { "ABC", "DEF","GHI" }; String searchItem= "def";
if(String.join(",", LIST_OF_ELEMENTS).UpperCase())) { System.out.println("found element");
break;
答案 12 :(得分:0)
对于Java 8,您可以再添加⼀个解决⽅案,如下所⽰
List list = new ArrayList<>();
String searchTerm = "dvd";
if(String.join(",", list).toLowerCase().contains(searchTerm)) {
System.out.println("Element Present!");
}
答案 13 :(得分:-1)
你可以应⽤这个⼩技巧。
将所有字符串更改为相同案例:上限或⼩写
对于C#代码:
列出searchResults = sl.FindAll(s =&gt; s.ToUpper() .Contains(seachKeyword.ToUpper()));对于Java代码:
import java.util.*;
class Test
{
public static void main(String[] args)
{
String itemCheck="check";
ArrayList listItem =new ArrayList();
listItem.add("Check");
listItem.add("check");
listItem.add("CHeck");
listItem.add("Make");
listItem.add("CHecK");
for(String item :listItem)
{
UpperCase().UpperCase()))
{
System.out.println(item);
}
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论