![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| OlegRu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2005 Репутация: нет Всего: нет |
Подскажите новичку:
может ли Вектор содержать в своих элементах другие векторы? Например так:
Я так понимаю, что A теперь имеет такую структуру: A: [0]-> [1,2] [1]->[5,6,7] А как теперь дописать в А[0] еще один элемент "3" ? Чтобы было [0]-> [1,2,3]. Это я решаю такую "локальную" задачу как парсинг строки с именами переменных и их значениями. Напр. есть динамическая строка (с неизвестным кол.-м переменных): Str="X1=1,3,5;Y=some_text;A2=150;". Я хочу на выходе получить динамический массив (например, Вектор) в виде: A[0][0]-> "X1" <- Var[0] A[0][1]-> "Y" <- Var[1] A[0][2]-> "A2" <- Var[2] A[1][0]-> "1" <- Value[0] A[1][1]-> "3" <- Value[1] A[1][2]-> "5" <- Value[2] A[2][0]-> "some_text" <- Value[0] A[3][0]-> "150" <- Value[0] Сам распарсиватель я написал без проблем, но не знаю как сформировать полученные вектора в один общий динамических многомерный массив с возможностью дописывать новые элементы или изменять старые. Подскажите, пожалуйста, кратенько чисто схему реализации этой задачи именно Векторами. P.S. Эту задачу я решаю на J2ME, а не Java. Это сообщение отредактировал(а) Lamer George - 7.12.2005, 17:44 |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Да можно, т.к. Vector это обьект и сам хранит обьекты.
На счёт парсинга совсем не туда, попробуй регулярными выражениями. Если хочеться собственный парсер, то копать формальные грамматики, конкретно по Xомскому уровня 4 (реги)(по сути простой лексер) тебе достаточно для строки что ты привёл. Если в выражении встречаеться "разбор по смыслу" не с лева на право, а есть приоритеты (скобки в мат. выражении например), то уровнем выше контекстно-свободные грамматики тебе в помощь. Простейшая реализация на автомате с магазином разберёт тебе почти любую твою фантазию -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| OlegRu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2005 Репутация: нет Всего: нет |
To Sardar
Спасибо, конечно, за подсказку про рег. выражения, но я буду очень сильно удивлен, если мне скажут, что в J2ME MIDP 2.0 они работают. Всем спасибо за участие. Вот я дописал свою функцию. Если кому надо,- то берите. Смысл заключался в том, что: сервер передал на мобилу набор переменных в виде строки S, которая должна быть, например, такого формата: S="Var1=5,7,3,;Var2=5,8,;Var3=text..text,;". А функция split расщепляет ее по именам и значениям переменных и заносит в вектор V. Если кто делал красивее или компактнее под J2ME - поделитесь, плиз. (хотя эта версия мне нравится
Это сообщение отредактировал(а) OlegRu - 7.12.2005, 18:14 |
|||
|
||||
| igon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 1 Всего: 21 |
И как ты потом из V определяешь, что, скажем, 8 - это второй параметр для переменной Var2?
Вот более компактный вариант
-------------------- Хотите поговорить об этом? |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Вкуриваем это: http://www.softcraft.ru/translat/lect/t04-03.shtml
а ещё лучше весь курс. Направленый граф/автомат лучше сделать на таблице, где по горизонтали приходят классы символов, а по вертикали текущее состояние. Маленькой табличкой всё порешаешь. Сохранять инфу лучше не в нескольких векторах, а в одном, держа пары ключ=>[значения] в обьектах. Функционально делать будет то же самое, просто код станет короче, логически более верный. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| OlegRu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2005 Репутация: нет Всего: нет |
To igon
<< И как ты потом из V определяешь, что, скажем, 8 - это второй параметр для переменной Var2? Да, согласен с тобой полностью. Можно, но не удобно. И код твоего примера намного проще (без лишних логических переменных). Я оставил как у тебя, только переписал под case-структуру. Теперь если подать на вход строку: "var1=12,56,3,0,11;var2=4,9,2;var3=text;", то получим: V=[ [ var1 , 12 , 56 , 3 , 0 , 11 ] [ var2 , 4 , 9 , 2 ] [ var3 , text ] ] Vector V1=null; V1=(Vector)V.elementAt(0); // Так получаем имя переменной var1: System.out.println(V1.elementAt(0)); // А например так получаем 2-й элемент переменной var1: System.out.println(V1.elementAt(2)); Лично мне так удобно работать. Возник еще такой вопрос: в PHP это так: $str="var1"; $$str; - т.е. применяем "переменную переменной", чтобы объявить любую строку как переменную. Как это же сделать в Java??? Т.е. мне надо, чтобы V1=(Vector)V.elementAt(0); [ var1 , 12 , 56 , 3 , 0 , 11 ] легко преобразовалось в int[] var1 = new int[5]; To Sardar Спасибо за ссылку, этот сайт мне пригодится - уверен! Тема интересная, но пока нет времени вкуривать Хотя раньше занимался автоматами Мили и Мура, диаграммы Вейча-Карно и т.д. |
|||
|
||||
| Dancer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 537 Регистрация: 29.4.2005 Где: Nizhniy Novgorod Репутация: нет Всего: 37 |
Что-то вроде такого можно. Хотя кажется через ArrayList можно, но например в J2ME его нету, поэтому придётс так
-------------------- У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! |
|||
|
||||
| OlegRu |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.12.2005 Репутация: нет Всего: нет |
To Dancer
Спасибо, это я знаю. Там похоже только еще надо приведение типов сделать: Integer.parseInt((String)vec.elementAt(i), 10) Хотя я делаю так: Integer.valueOf( (String)vec.elementAt(i) ).intValue(). Интересно, какой код быстрее работает? Но мой вопрос был в другом Пусть есть String str="var_str"; Как создать автоматически переменную String var_str=""; ??? В РНР это называется "переменная переменной": $str="var_str"; $$str; <- тут мы создаем переменную $var_str. Или так нельзя в Java?? Это сообщение отредактировал(а) OlegRu - 16.12.2005, 16:00 |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Тьфу, блин, топики перепутал
Пятница... Это сообщение отредактировал(а) Lamer George - 16.12.2005, 16:58 -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| igon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 1 Всего: 21 |
-------------------- Хотите поговорить об этом? |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |