| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java ME (J2ME) > Получение массивов |
| Автор: _LEM_ 14.3.2007, 12:41 |
| Хотелось бы узнать о этих способах в J2ME. Т.к в j2se нашёл только StringTokinezer и то грамозкий способ =) В j2me вообще ни чего путного не нашёл. |
| Автор: W0LF 14.3.2007, 12:45 |
| Автор: Dancer 14.3.2007, 12:50 |
| _LEM_, я же тебе на другом форуме готовый метод привёл, бери и пользуй Ну, нету в j2me ничего похожего на StringTokenizer, понимаешь, НЕТУ!!! http://forum.sources.ru/index.php?showtopic=173254 Если тебе нужно именно так, как организован класс StringTokenizer в J2SE, то возьми мой метод за основу и сделай свой собственнй класс. (где-то у меня был такой уже говтовый, но боюсь искать буду дольше чем его писать) Главное не забудь сделать implemets Enumeration для своего класса. Если с Vector работать нельзя, не хочешь, не умеешь (нужное подчекнуть), то можешь привести всё это дело в массив String s="aaa,,bbb,ccc,,,"; Vector vec = stringTokenizer(s,",,"); String strArray[] = new String[vec.size()]; for(Enumeration el = vec.elements(), int i=0; el!=null && el.hasMoreElements();strArray[i++]=el.nextElement())); |
| Автор: javastic 15.3.2007, 10:20 |
| _LEM_, ну напиши себе свой собственный метод который будет разделять строку на части и все дела. Потом используй где хочешь и сколько хочешь. |
| Автор: _LEM_ 15.3.2007, 11:17 | ||
Дык и спрашиваю как это сделать, субсторами и индексоф не выйдёт. т.к. вид такой: data||data||data data||data||data Надо разбить по переносу,потом по || каждую строку, причём их кол - во неизвестно, эти данные беруться от сервера. Добавлено @ 11:19 Кстати от сервера могу как угодно выдать данные , поэтому и консультируюсь на счёт способов получения массивов. |
| Автор: javastic 15.3.2007, 12:52 | ||
Ну дык и всё. Начало такое:
а дальше сам |
| Автор: Dancer 16.3.2007, 13:58 | ||
Дык так и делай String s=.... ;// это твоя прочитанная строка из файла или ещё откуда Vector vecLines = stringTokenizer(s,"\n"); //первое разделение, на строки. String strArray[][] = new String[vecLines.size()][]; for(Enumeration el = vecLines.elements(), int i=0; el!=null && el.hasMoreElements();i++) { Vector v = stringTokenizer((String)el.nextElement(),"||")); strArray[i] = new String(v.size()); for(Enumeration e = v.elements(), int j=0; e!=null && e.hasMoreElements();strArray[i][j++]=e.nextElement()); v = null; } |
| Автор: javastic 16.3.2007, 14:03 |
| Dancer, походу человек хочет получить уже написанный код чтобы не париться. |
| Автор: Dancer 16.3.2007, 14:39 |
| ды ёпрст! |
| Автор: Dancer 16.3.2007, 18:08 | ||
в моём методе stringTokenizer у меня была допущена маленькая ошибочка (писал на "коленке"). Сейчас вот полностью нормальный, рабочий и правильный код.
|
| Автор: _LEM_ 17.3.2007, 12:47 | ||||
| javastic, Те часть ответа дал Dancer, вот я добавлю,что тупо списать это не выход для меня. Даже больше , я не просил ни каких готовых методов,хотя спасибо конечно.
Даже обидно -( Делаю свой набросок ,но так в J2ME нович0г ,ни фига не выходит
|
| Автор: W0LF 17.3.2007, 15:25 |
1. Отбросим технологию j2me while - это зарезервированное слово, нельзя так писать. Cначала нужно выучить язык. А потом учить технологию. Брюс Эккель - "Философия Java" 3 издание. Хорошая книга ИМХО |
| Автор: _LEM_ 17.3.2007, 18:09 |
| Хе, про php тоже так говорили,но тем не менее я освоил его без учебников и с обычного сотового телефона ;-) - Зарезервиванно ,но обьявленно же как обьект String, если так низя ,то очень хорошо ,уже знаю что так нельзя -) - Допустим написал String whilee = "whilee"; // Что на счёт массива скажете? |
| Автор: W0LF 17.3.2007, 19:45 |
| В твоем случае ты не знаешь, сколько будет элементов. Vector - это динамический массив. Так что юзай его |
| Автор: _LEM_ 18.3.2007, 10:01 | ||
Ок, теперь код такой:
Где ещё накосячил тоже пишите -) |
| Автор: W0LF 18.3.2007, 15:29 | ||
| Извини, но наверно тут никто не захочет следить за всеми твоими "косяками". Я же говорю - синтаксис языка надо хотя бы знать(не равно в java - "!=") Ставь jsdk, jde и в перед. Если у тебя будет Intellij Idea, то она отлично на этапе написания кода показывает все твои ошибки. А если залезть там в настройки синтаксического анализатора, то она тебе будет показывать и логические ошибки типа таких -
и будет говорить как их убрать. Плюс не забывай читай книгу. |
| Автор: _LEM_ 18.3.2007, 16:45 | ||||
Вообще не надо мне приписывать лишнее ;-) Я не прошу следить за "всеми косяками" ;-)
Странно ,у меня в учебнике написанно что и <> тоже можно. Стоит уже ;-) показывает, что ошибка Читаю аж 3 =) 2 по jse (там синтаксис смотрю) описание языка уже прочитал. и 1 по jme там криво всё описанно но понять можно. Вообщем <> заменить , остальное правильно? next+1 надо? |
| Автор: _LEM_ 18.3.2007, 17:29 | ||
Всё ,вроде привёл в порядок код, хотел проверить внаписал:
|
| Автор: W0LF 18.3.2007, 19:58 | ||||||||||||||||
С этими ошибками тебе в раздел - "Общая java"
У тебя изначально "cikl" равен "null", а если так, то
мы возвращаем "null" так как
не инициализирован! Итог этого всего - NullPointerException! |
| Автор: _LEM_ 19.3.2007, 00:14 |
| подписал Vector arr = new Vector(); и cikl = "nullll"; хотя не понимаю зачем это.всё равно цикл работать будет пока не оборву - break; т.к условие не выполниться. Результат не изменился - пустой экран. Среда пишет: startApp threw an Exception java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 at java.util.Vector.elementAt(Vector.java:432) at Midlet.startApp(Midlet.java:43) at javax.microedition.midlet.MIDletProxy.startApp(MIDletProxy.java:46) at com.sun.midp.midlet.Scheduler.schedule(+270) at com.sun.midp.main.Main.runLocalClass(+28) at com.sun.midp.main.Main.main(+116) Execution completed. 727502 bytecodes executed 26 thread switches 741 classes in the system (including system classes) 3826 dynamic objects allocated (114656 bytes) 2 garbage collections (89732 bytes collected) BUILD SUCCESSFUL (total time: 10 seconds) ---------------------------------------------- Ага,там мне предложат просто использовать StringTokinezer =D В учебнике например написанно что добавить элемент можно add ну ещё addElement , на add среда ругаеться на addElement - нет. Типа особенность j2me => раз уж пишу под мобилу обращаюсь в соответствующий раздел. Понимаю,надо показать что ты модер , но давай не будем отклоняться от темы лишний раз ;-) |
| Автор: W0LF 19.3.2007, 05:04 | ||||||||||
Сделай так -
а в цикле оставь -
Я так понял ты сделал следующее -
? Короче, на тебе МЕшный http://alexander.lonsky.googlepages.com/StringTokenizer.java Специально для тебя переделал. тока он не работает с UTF-8. Поддерживает чисто инглишь так как времени нет! Он полностью идентичен тому
Вот, я думаю вопрос исчерпан?!?
Я ничего никогда не показываю просто так! |
| Автор: W0LF 19.3.2007, 05:49 | ||
реализация на всякий случай -
Все, юзай на здоровье. |
| Автор: _LEM_ 19.3.2007, 10:29 | ||
| Нет, моя реализация выше. Готовый мне не надо. Dancer уже дал готовый метод тем более =)
Сейчас вообще написал int cikl = 0; А в цикле while (cikl <= 99999999) т.к. то есть пока next = tmpstring.indexOf(razedlitel); не станет == -1 ----------- Ужё чё тока не пробовал - пустой экран. ----------- PS: на всякий - интересует тока моя функция или стандартные j2me. Тупо списывать не чего не понимая - не для меня. |
| Автор: javastic 19.3.2007, 10:51 | ||
|
| Автор: Dancer 19.3.2007, 11:37 |
| int count = vec.size(); int count = vec.size()-1; чувствуешь разницу? Допустим, ветор у нас сейчас заполнен 10 элементами, size() тебе вернёт, что в векторе 10 элементов. а перебираться то они будут с 0 до 9. (учим мат.часть) На дальнейшее, лучше ползьзуй так как я это пользовал, через nextElemenent(). (один раз поймёшь, далее всё просто будет) В j2ME нету add метода у вектора, есть лишь addElement() - это так. while (cikl == "OFF") нахрена тебе это? проще вроде бы так while (true) - вроде бы ты это и имел ввиду. переменные start,next,arr внеси в свой метод, они же у тебя локальные. Так же не забудь проинициализировать arr = new Vector() - хотябы так. в начале работы твоего метода. (а то хорошего ничего не будет) |
| Автор: _LEM_ 19.3.2007, 22:22 | ||||
| Я знал,думал просто один будет пустой. Просто тупое условие которое не выполниться,что бы цикл работал.
Да и сейчас нету =) Вроде ошибок нету (даже консоль не ругаеться),а экран пустой. http://hostwap.info/trash/j2me.txt - текущая версия кода. |
| Автор: Dancer 20.3.2007, 12:02 | ||||
| disp +=vec.elementAt(i); disp +=(String)(vec.elementAt(i)); Добавлено @ 12:10 Да, ещё. возвращаясь к cikl - убери его. он тебе совершенно не нужен.
и ещё маленькое дополнение, не форматируй Java код как Cи рекомендации по форматированию можешь посмотреть у Sun
у меня твой код работает (в общем и целом) |
| Автор: _LEM_ 20.3.2007, 14:29 | ||
| Dancer, Ага поставил (String) заработало - спасибо!! Кстати в каких случаях ставиться (тип) я же вроде строку и добавлял в массив. На выходе надо всё равно указывать?
Теперь исчерпан -) |