Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/438: Рейтинг темы: голосов - 438, средняя оценка - 4.89
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
1

Как изящно извлечь из строки часть, находящуюся между двумя известными символами?

21.04.2012, 20:15. Показов 91747. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
например, имеется строка вида:

фыва пролджэ. йцукен гшщзхъ: ячсмить бю.
нужна часть между левой точкой и ":" (исходим из того, что уверенность в том, что в строке имеются оба символа один левее другого, имеется).

предложите хорошую идею.

мне только такое в голову приходит:
Java
1
2
3
4
String str = "фыва пролджэ. йцукен гшщзхъ: ячсмить бю.";
String[] lines = str.split (":");
lines = lines[0].split("\\.");
String resultStr = lines[lines.length-1];
спасибо заранее!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.04.2012, 20:15
Ответы с готовыми решениями:

Удаление в текстовом файле символов между двумя известными символами
Добрый день. Не нашёл решение проблемки на форуме, а суть проблемы в следующем: есть текстовичок...

Как выбрать из строки подстроку, находящуюся между двумя другими подстроками?
Как выбрать из строки подстроку находяшуюся мужду двумя другими подстраками? Например...

Вывести подстроку данной строки, находящуюся между символами a и b
Ребята подскажите как разобраться с проганьем задач в которых используются строки Подскажите...

В заданном массиве отсортировать по возрастанию его часть, находящуюся между двумя введенными номерами.
#include <iostream.h> #include <stdlib.h> #include <iomanip.h> int i; void main() {...

9
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
22.04.2012, 10:47 2
Лучший ответ Сообщение было отмечено как решение

Решение

Java
1
2
String str = "фыва пролджэ. йцукен гшщзхъ: ячсмить бю.";
String resultStr = str.substring(str.indexOf('.') + 1, str.indexOf(':'));
3
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.04.2012, 11:32  [ТС] 3
спасибо!
но я немного задачу "недоформулировал". строка может быть и такой:

Java
1
"фыва. пролджэ. фыва. пролджэ. йцукен гшщзхъ: ячсмить бю.";
вытащить нужно "йцукен гшщзхъ". т.е. то, что между двоеточием и ближайшей к нему точкой слева.
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
22.04.2012, 11:38 4
novi4ok, какой експектед резалт для строки
Java
1
"фыва. пролджэ. фыва. пролджэ. йцукен: sdgdfgdg. sdfbdfb: гшщзхъ: ячсмить бю.";
?
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.04.2012, 12:56  [ТС] 5
то, что между самым правым ":" и первой точкой слева от него. для строки

Java
1
"фыва. пролджэ. фыва. пролджэ. йцукен: sdgdfgdg. sdfbdfb: гшщзхъ: ячсмить бю."
это

Java
1
" sdfbdfb: гшщзхъ";
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
22.04.2012, 13:44 6
Лучший ответ Сообщение было отмечено как решение

Решение

Java
1
2
3
String str = "фыва. пролджэ. фыва. пролджэ. йцукен: sdgdfgdg. sdfbdfb: гшщзхъ: ячсмить бю.";
String tmp;
System.out.println((tmp = str.substring(0, str.lastIndexOf(':'))).substring(tmp.lastIndexOf('.') + 1));
Можно и через регулярные выражения, но будет хуже перфоманс
2
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
22.04.2012, 14:27  [ТС] 7
M128K145, спасибо еще раз.
мне рег. выр. было бы удобнее, т.к. это гибче: шаблоны можно считывать из какого-нибудь внешнего конфигуратора, не меняя кода. перфоманс не критичен (пару сотен строк за один удар по клавише)
0
Эксперт JavaЭксперт С++
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
22.04.2012, 18:52 8
Как-то так
Java
1
2
3
4
5
6
String str = "фыва. пролджэ. фыва. пролджэ. йцукен: sdgdfgdg. sdfbdfb: гшщзхъ: ячсмить бю.";
Matcher matcher = Pattern.compile("\\.(?:([^\\.]+))\\:").matcher(str);
String res = "";
while (matcher.find())
   res = matcher.group();
System.out.println(res.substring(1));
0
556 / 510 / 25
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
23.04.2012, 00:08  [ТС] 9
M128K145, спасибо!

мне PHP-люди подсказали вообще идеальный вариант шаблона:
([^.]+)(?=:[^:]*$
но это нужно черный пояс по регулярным выражениям иметь, чтобы такое написать.
0
0 / 0 / 0
Регистрация: 21.04.2015
Сообщений: 1
21.04.2015, 21:09 10
Java
1
2
3
4
Matcher matcher = Pattern.compile("[&](.*?)[=]").matcher(str);//Третий паттерн для &=
                String res = "";
                while (matcher.find())
                    res = matcher.group(1);
Требуется спарсить URL, проблема в следующем, как сделать так чтобы в строку между символами не попадали строки содержащие этот символ, т.е. :
"https://www.google.by/webhp?sourceid=chrome-instant&rlz=try&next&ion=1&espv=2&ie=UTF-"
к примеру на выходе вот такая строчка:
Код
next&ion
0
21.04.2015, 21:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.04.2015, 21:09
Помогаю со студенческими работами здесь

Удалить из текста его часть, заключенную между двумя символами, которые вводятся
Добрый вечер. Подскажите пожалуйста, как из строки удалить выражение в скобках. Я не совсем...

Как составить регулярку для поиска между двумя символами? Например, между { и }, между [ и ]
Здравствуйте. Как составить регулярку между двумя знаками. Например между { и }, , {} и т д....

Получить новую строку, вставив между двумя символами исходной строки символ *
Дана строка. Получите новую строку, вставив между двумя символами исходной строки символ *....

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru