NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Существует несколько реализаций класса StringTokenizer для J2ME. Этот Ostermiller будет, скорее всего, включать функциональность, в которой Вы нуждаетесь
, См. также эта страница на Мобильном Пит-стопе Программирования для некоторых модификаций и следующего примера:
String firstToken;
StringTokenizer tok;
tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();
Существует не создан в методе для разделения строк. Необходимо записать это на собственном использовании String.indexOf()
и String.substring()
. Не трудно.
String.split (...) доступен в J2SE, но не J2ME.
Вы обязаны писать свой собственный алгоритм: связанное сообщение с демонстрационным решением .
Это зависит от того, чего точно Вы хотите достигнуть, но функциональный String.substring () будет там где-нибудь:
String myString = "Hello World";
Это распечатает подстроку, начинающую с индекса 6 в конец строки:
System.out.println(myString.substring(6));
Это распечатает подстроку, начинающую с индекса 0 до индекса 5:
System.out.println(myString.substring(0,5));
Вывод всего кода выше:
World Hello
Объединение это с другими Строковыми функциями (indexOf()
. и т.д.) для достижения желаемого эффекта!
Перечитывание Вашего вопроса, выглядит, как будто Вы, возможно, искали String.split()
. Это разделит Вашу входную строку на массив строк на основе данного regex:
String myString = "Hi-There-Gang";
String[] splitStrings = myString.split("-");
Это приведет к массиву splitStrings, содержащему три, представляют в виде строки, "Hi"
, "There"
и "Gang"
.
Перечитывание Вашего вопроса снова, String.split
не доступно в J2ME, но тот же эффект может быть достигнут с [1 111] и indexOf
.
Надеюсь, это вам поможет... Это моя собственная реализация, которую я использовал в своем приложении. Конечно, ее можно оптимизировать. У меня просто нет времени на это... и еще, я работаю над StringBuffer. Просто рефакторите это, чтобы иметь возможность использовать String вместо него.
public static String[] split(StringBuffer sb, String splitter){
String[] strs = new String[sb.length()];
int splitterLength = splitter.length();
int initialIndex = 0;
int indexOfSplitter = indexOf(sb, splitter, initialIndex);
int count = 0;
if(-1==indexOfSplitter) return new String[]{sb.toString()};
while(-1!=indexOfSplitter){
char[] chars = new char[indexOfSplitter-initialIndex];
sb.getChars(initialIndex, indexOfSplitter, chars, 0);
initialIndex = indexOfSplitter+splitterLength;
indexOfSplitter = indexOf(sb, splitter, indexOfSplitter+1);
strs[count] = new String(chars);
count++;
}
// get the remaining chars.
if(initialIndex+splitterLength<=sb.length()){
char[] chars = new char[sb.length()-initialIndex];
sb.getChars(initialIndex, sb.length(), chars, 0);
strs[count] = new String(chars);
count++;
}
String[] result = new String[count];
for(int i = 0; i<count; i++){
result[i] = strs[i];
}
return result;
}
public static int indexOf(StringBuffer sb, String str, int start){
int index = -1;
if((start>=sb.length() || start<-1) || str.length()<=0) return index;
char[] tofind = str.toCharArray();
outer: for(;start<sb.length(); start++){
char c = sb.charAt(start);
if(c==tofind[0]){
if(1==tofind.length) return start;
inner: for(int i = 1; i<tofind.length;i++){ // start on the 2nd character
char find = tofind[i];
int currentSourceIndex = start+i;
if(currentSourceIndex<sb.length()){
char source = sb.charAt(start+i);
if(find==source){
if(i==tofind.length-1){
return start;
}
continue inner;
} else {
start++;
continue outer;
}
} else {
return -1;
}
}
}
}
return index;
}