indexOf
и contains
не используют какую-либо кодировку символов, и вы можете использовать символы, которые, например, не используются в вашей кодировке символов.то есть он игнорируется для этих функций.
All String.indexOf () и содержит символ сравнения для символа.Я не уверен, какое поведение вы ожидаете от 100% арабской поддержки.Вот упрощенная версия того, что indexOf () / contains () делает
public static int indexOf(String string, char[] chars) {
LOOP:
for (int i = 0; i < string.length() - chars.length; i++) {
for (int j = 0; j < chars.length; j++)
if (string.charAt(i + j) != chars[j])
continue LOOP;
return i;
}
return -1;
}
public static void main(String args[]) {
char[] chars = "test".toCharArray();
String one = "qqwtestq";
String two = "qwqtqwe";
String str = new String(chars);
System.out.println("indexOf(" + one+", " + Arrays.toString(chars) + ") = " + indexOf(one, chars));
System.out.println(one + ".indexOf(" + str + ") = " + one.indexOf(str));
System.out.println("indexOf(" + two+", " + Arrays.toString(chars) + ") = " + indexOf(two, chars));
System.out.println(two + ".indexOf(" + str + ") = " + two.indexOf(str));
char[] chars2 = { '\uffff', '\uFeFF' };
String test = "qqw\uffff\uFeFFq";
String str2 = new String(chars2);
System.out.println("indexOf(" + test+", " + Arrays.toString(chars2) + ") = " + indexOf(test, chars2));
System.out.println(test + ".indexOf(" + str2 + ") = " + test.indexOf(str2));
}
Prints
indexOf(qqwtestq, [t, e, s, t]) = 3
qqwtestq.indexOf(test) = 3
indexOf(qwqtqwe, [t, e, s, t]) = -1
qwqtqwe.indexOf(test) = -1
indexOf(qqw??q, [?, ?]) = 3
qqw??q.indexOf(??) = 3
Можете ли вы привести пример, где этот метод не работает?
РЕДАКТИРОВАТЬ: Этот тест проверяет все возможные символы, чтобы увидеть, работает ли indexOf, как ожидалось.то есть то же самое для каждого возможного символа.
for(int i=Character.MIN_VALUE;i<= Character.MAX_VALUE;i++) {
String find = new String(new char[] {(char) i});
String str = new String(new char[] {(char) (i+1), (char) i});
String str1 = new String(new char[] {(char) (i+1)});
int test1 = str.indexOf(find);
if (test1 != 1)
throw new AssertionError("test1 failed i="+i);
int test2 = str1.indexOf(find);
if (test2 != -1)
throw new AssertionError("test2 failed i="+i);
}
Не находит расхождений.