"contains"
と"equalignorecase"
文字列の機能を同時に使用できますか。
文字列を検索する必要があるデータがあり"NBN"
ました。見つかった場合は、フラグを更新する必要があります。しかし、私はそこにいるのを見ています
"nBN","nBn","NBn","nbN","NbN","Nbn"
データのセットにも存在します。だから私は複数の組み合わせと比較を得ています。
一度に両方の関数を使用して、これらの多くの比較を克服する方法はありますか?
Apache StringUtils#containsIgnoreCase()を使用できます
StringUtils.containsIgnoreCase("WholeString", "NBn");
String#toLowerCase
代わりに使いやすいと思うかもしれませんString#equalsIgnoreCase
例えば...
if ("I want my NBN".toLowerCase().contains("nbn")) {...}
これには組み込みの機能はありませんが、ベスト プラクティスは、両方の文字列を小文字に変換してから、contains() を使用することです。
String matchString = "NPN";
String lowercaseMatchString = matchString.toLowerCase();
String lowercase = stringToTest.toLowerCase();
return lowercaseMatchString.contains(lowercase);
データに「NBN」が含まれているかどうかを確認したいだけの場合は、 StringUtils.containsIgnoreCase() が最適なオプションです。正確な目的を果たすためです。ただし、発生数などもカウントしたい場合は、カスタム ソリューションを作成することをお勧めします。
Apache Commons
http://commons.apache.org/proper/commons-lang/apidocs/src-html/org/apache/commons/lang3/StringUtils.htmlから:
1337 public static boolean containsIgnoreCase(final CharSequence str, final CharSequence searchStr) {
1338 if (str == null || searchStr == null) {
1339 return false;
1340 }
1341 final int len = searchStr.length();
1342 final int max = str.length() - len;
1343 for (int i = 0; i <= max; i++) {
1344 if (CharSequenceUtils.regionMatches(str, true, i, searchStr, 0, len)) {
1345 return true;
1346 }
1347 }
1348 return false;
1349 }
187 static boolean regionMatches(CharSequence cs, boolean ignoreCase, int thisStart,
188 CharSequence substring, int start, int length) {
189 if (cs instanceof String && substring instanceof String) {
190 return ((String) cs).regionMatches(ignoreCase, thisStart, ((String) substring), start, length);
191 } else {
192 // TODO: Implement rather than convert to String
193 return cs.toString().regionMatches(ignoreCase, thisStart, substring.toString(), start, length);
194 }
195 }