Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование глобальных переменных (в число) 
:(
    Опции темы
Ybr
  Дата 26.4.2010, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 4.3.2010
Где: Москва

Репутация: нет
Всего: нет



Здравствуйте!
У меня есть следующий кусок кода:
Код

Map<String, String> table = new HashMap<String, String>();
 
table.put("([xy])\\^(\\d+)","($1^($2+1)/($2+1)");// степенная функция

(начинается с $1, потому что где раньше был $0)

$2 - совершенно точно, какие-то число. Поэтому вместо строки ($2+1) я хотел бы вставить числовое значение этого выражения. Я пробовал разные методы, рылся в гугле, но решения не нашел.

Пробовал:
Код

Integer buf = Integer.parseInt("$2+1");
 
table.put("([xy])\\^(\\d+)","($1^"+buf+"/"+buf);// степенная функция

Когды пытался вывести что-то с помощью вышеназванного ключа table (($1^($2+1)/($2+1)), получал неизменно:
Цитата

run:
Exception in thread "main" java.lang.NumberFormatException: For input string: "$2+1"
at java.lang.NumberFormatException.forInputString(Num berFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:449)
at java.lang.Integer.parseInt(Integer.java:499)
at dsl.src.Parser.<init>(Parser.java:13)
at dsl.src.Main.main(Main.java:18)
Java Result: 1
BUILD SUCCESSFUL (total time: 2 seconds)


Если короче, то я бы хотел узнать способ преобразования глобальных переменных из строки в число. Возможно, существуют аналогичные по функциональности возможности. С удовольствием узнаю про них.
PM MAIL   Вверх
yeputons
Дата 26.4.2010, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 1.4.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 5



Не очень понятна фраза
Цитата

$2 - совершенно точно, какие-то число.

Т.е. Вы хотите сказать, что $2 должен как-то преобразоватся в число? Или в результате некой подстановки должно заменится на число?
Если первое, то такой конструкции в Java, насколько я знаю, нет, зато есть в Delphi. Эквивалент дельфийскому $2 в Java - 0x2 (hex-вид)
PM MAIL ICQ Skype   Вверх
Ybr
Дата 27.4.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 4.3.2010
Где: Москва

Репутация: нет
Всего: нет



Нет, немного не так. Смотрите.

В $2 находится результат того, что найдено с помощью куска регекспа - (\\d+). Очевидно, это будет число. Далее, допустим, я хочу вывести это число на консоль. Не ничего проще:
Код

System.out.println("$2");

А теперь предположим, что с этим числом мне необходимо произвести какие-либо арифметические действия. Например, увеличить на 1.

Вопрос моего сообщения как раз и заключается в том, как можно записать значение глобальной переменной в переменную, например, типа int.

Это сообщение отредактировал(а) Ybr - 27.4.2010, 19:01
PM MAIL   Вверх
yeputons
Дата 27.4.2010, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 1.4.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 5



Не слишком по делу:
У меня ощущение, что я чего-то не понимаю. Конструкция вида
Код

System.out.println("$2");

не должна работать просто по определению. Java не выполняет никаких подстановок в строки.
Оно у Вас действительно работает? smile

По делу:
Integer.parseInt хочет получить на вход строку, в которой содержится ровно одно число, а не выражение. Можете попробовать:
Код

int x = Integer.parseInt("$2") + 1;



PM MAIL ICQ Skype   Вверх
AndrewMormysh
Дата 28.4.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 8.2.2008

Репутация: 1
Всего: 1



Ybr, разорвал мозг   smile 

Долго не был на форуме.. и ваш пост попался под руку первым ))

Расскажите, пожалуйста, каким образом связаны вышеописанная Map и те значения строкового представления паттернов, которые вы в него записываете?
PM MAIL   Вверх
Walker
Дата 28.4.2010, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 23.10.2006

Репутация: нет
Всего: 16



Для работы с регулярными выражениями предназначен пакэдж java.util.regex.
Идея работы с группами (отсюда.):
Код

Pattern datePatt = Pattern.compile("([0-9]{2})/([0-9]{2})/([0-9]{4})");
...
Matcher m = datePatt.matcher(dateStr);
if (m.matches()) {
  int day   = Integer.parseInt(m.group(1));
  int month = Integer.parseInt(m.group(2));
  int year  = Integer.parseInt(m.group(3));
}




--------------------
"От вчерашних побед остаётся усталость, если завтрашний день не сулит ничего..."
PM MAIL   Вверх
Ybr
  Дата 28.4.2010, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 4.3.2010
Где: Москва

Репутация: нет
Всего: нет



Спасибо огромное пользователям Walker и yeputons за интересные ответы. Сходу сработал код Walker'а. Оно и понятно.
Идеи yeputons'а натолкнули меня на еще один способ реализации:

Код

String tmp = "$2";
int sub_tmp   = Integer.parseInt(tmp);

(код не запускал, но по идее должно работать smile)

PS На самом деле, код не работает smile . Потому что parseInt распознает число, а я ему влепил вместо числа какой-то $2.

Это сообщение отредактировал(а) Ybr - 28.4.2010, 20:39
PM MAIL   Вверх
yeputons
  Дата 29.4.2010, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 1.4.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 5



Цитата

PS На самом деле, код не работает smile

Ну и замечательно. smile Я уж испугался , что Java очень-очень прокачалась и стала похожа на PHP.  smile 

p.s. Тему пометь решённой

Это сообщение отредактировал(а) yeputons - 29.4.2010, 10:27
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1093 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.