Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
То, что я закончил тем, что делал для jQuery 1.2:
jQuery.extend(
jQuery.expr[':'], {
Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"
});
Это расширит jQuery, чтобы иметь a: Содержит селектор, который нечувствителен к регистру: содержит селектор, остается неизменным.
Редактирование: Для jQuery 1.3 (благодарит @user95227) и позже Вам нужно
jQuery.expr[':'].Contains = function(a,i,m){
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
Редактирование: По-видимому, доступ к DOM непосредственно при помощи [1 110]
(a.textContent || a.innerText || "")
вместо [1 111]
jQuery(a).text()
В предыдущем выражении значительно ускоряет его так попытка на Ваш собственный риск, если скорость является проблемой. (см. вопрос @John )
Последнее редактирование: Для jQuery 1.8 это должно быть:
jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
return function( elem ) {
return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
};
});
As of jQuery 1.3, this method is deprecated. To get this to work it needs to be defined as a function:
jQuery.expr[':'].Contains = function(a,i,m){
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
Если кому-то (как я) интересно, что делает и , m[3], средний в , Содержит определение.
<час>КЛЮЧ/ЛЕГЕНДА: Params, сделанный доступный jQuery для использования в селекторных определениях:
r = массив jQuery тщательно исследуемых элементов. (например: r.length = Число элементов)
я = индекс элемента в настоящее время под наблюдением, в массиве r.
= элемент в настоящее время под наблюдением. Селекторный оператор должен возвратить true для включения его в его подобранные результаты.
m[2] = nodeName или *, что мы поиск (оставленный двоеточия).
m[3] = параметрический усилитель передал в: селектор (параметрический усилитель). Обычно индекс, как в [1 110]: энный из типа (5) , или строка, как в [1 111]: цвет (синий) .
jQuery.expr[':'].contains = function(a,i,m){
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
Код обновления отлично работает в версии 1.3, но в отличие от предыдущего примера "содержит" должна быть строчная в первой букве.