Как я разделяю строки в J2ME?

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, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

14
задан Spoike 28 April 2011 в 11:19
поделиться

5 ответов

Существует несколько реализаций класса StringTokenizer для J2ME. Этот Ostermiller будет, скорее всего, включать функциональность, в которой Вы нуждаетесь

, См. также эта страница на Мобильном Пит-стопе Программирования для некоторых модификаций и следующего примера:

String firstToken;
StringTokenizer tok;

tok = new StringTokenizer("some|random|data","|");
firstToken= tok.nextToken();
11
ответ дан 1 December 2019 в 12:14
поделиться

Существует не создан в методе для разделения строк. Необходимо записать это на собственном использовании String.indexOf() и String.substring(). Не трудно.

3
ответ дан 1 December 2019 в 12:14
поделиться

String.split (...) доступен в J2SE, но не J2ME.
Вы обязаны писать свой собственный алгоритм: связанное сообщение с демонстрационным решением .

3
ответ дан 1 December 2019 в 12:14
поделиться

Это зависит от того, чего точно Вы хотите достигнуть, но функциональный 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.

2
ответ дан 1 December 2019 в 12:14
поделиться

Надеюсь, это вам поможет... Это моя собственная реализация, которую я использовал в своем приложении. Конечно, ее можно оптимизировать. У меня просто нет времени на это... и еще, я работаю над 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;
}
3
ответ дан 1 December 2019 в 12:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: