powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сделать замену внутри нужного фрагмента строки?
12 сообщений из 12, страница 1 из 1
Как сделать замену внутри нужного фрагмента строки?
    #37813391
Фотография BlackGnomeГуест
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. если у меня бла-бал-бал-<tag> ... </tag>-бла-бал-бал
и вопрос замены меня интересует только в рамках этого тега. Т.е. что менять я буду решать уже когда буду внутри фрагмента
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37813498
Фотография ivanov-void
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackGnomeГуест,

Например, так -

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
...
public class Main {
    public static void main(String[] args) {
        String s = "бла-бал-бал-<tag> ... </tag>-бла-бал-бал ";
        Pattern p = Pattern.compile("(<tag>)([\\s\\S]*?)(</tag>)");
        Matcher m = p.matcher(s);
        if (m.find()) System.out.println(
        		s + "\n" + s.replaceAll(m.group(2), ",,,"));                       
    }
}
 
...



Код: java
1.
2.
бла-бал-бал-<tag> ... </tag>-бла-бал-бал 
бла-бал-бал-<tag>,,,</tag>-бла-бал-бал 
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37813754
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackGnomeГуест,

Если нужно высокопроизводительное решение, то Pattern лучше не использовать.
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37813769
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вроде сколько раз поднималась тема и говорили, что скорость работы со строками регулярок высокая. Есть с чем сравнить? Реальные цифры?
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37814018
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий КитBlackGnomeГуест,

Если нужно высокопроизводительное решение, то Pattern лучше не использовать.
А что использовать? В цикле перебирать символы строки?
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37814372
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mkБольшой Синий КитBlackGnomeГуест,

Если нужно высокопроизводительное решение, то Pattern лучше не использовать.
А что использовать? В цикле перебирать символы строки?

Если для задачи хватит одного перебора строки - то да.
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37814470
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл никЕсли для задачи хватит одного перебора строки - то да.
А если нет?)
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37814493
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avp.mkзабыл никЕсли для задачи хватит одного перебора строки - то да.
А если нет?)

А если нет - то нет естественно:)
Все зависит от задачи, например я выбираю наиболее затратную операцию и делаю перебором - остальные можно и паттерном, или заранее разбиваешь строку на несколько(по смыслу) и работаешь с ними в параллели. ну и т.п. - повторюсь, от задачи зависит.
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37814899
Joe R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник

Все зависит от задачи, например я выбираю наиболее затратную операцию и делаю перебором
А как выбираете, на глаз или специальными средствами?
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37815001
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joe Rзабыл ник
Все зависит от задачи, например я выбираю наиболее затратную операцию и делаю перебором
А как выбираете, на глаз или специальными средствами?

Обычно это понятно из контекста. Ну смотри у меня была задача распарсить sql-строку запроса(перевести в lower-case добавить кое-где пробелы, кое-где убрать и т.п.) далее, в зависимости от того есть ли в строке limit x offset y - получить числа x и y(для того чтобы достать из кэша только нужные данные), далее заменить все что внутри {#...} на какие то данные. и еще много чего. Эта задача не решалась обходом одной строки, ну может и решалась, но слишком много состояний(кэш включен или нет, есть что замещать или нет, есть лимит или нет...). Был выбран вариант - оптимизировать наиболее частый случай, в предположении что нету лимитов, кэша и т.д - он реализован перебором строки. Если же во время перебора выясняется что все сложнее - то строку получившуюся после первого прохода(все в lower-case пробелы расставлены, eq заменено на == и т.д) - уже прогоняем через паттерны всякие.
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37815060
Joe R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
забыл ник,

Понятно. Если у меня возникают какие-то сомнения насчёт скорости, я обычно беру профайлер и считаю с линейкой у кого длиннее), чтоб уж наверняка.
...
Рейтинг: 0 / 0
Как сделать замену внутри нужного фрагмента строки?
    #37815069
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Joe Rзабыл ник,

Понятно. Если у меня возникают какие-то сомнения насчёт скорости, я обычно беру профайлер и считаю с линейкой у кого длиннее), чтоб уж наверняка.

Ну в общем-то тоже правильно, но зачастую нужно учитывать саму задачу.
Например, профайлер показал что наиболее частый случай -
1. строка в которой нет limit, но есть #{} - 45%
2. строка - где нет ничего особенного - 37%
3. остальные - 18%

Если решать в лоб - то надо бы оптимизировать первый вариант, но по логике задачи - строку в ЛЮБОМ случае надо привести к общему виду(,без лишних пробелов и ловер кейс, замена eq на ==.... etc.), оптимизировать вариант 1 - приведет к большой мешанине кода, вариант 2 - буквально на чуть-чуть упадет производительность в наиболее частом случае, зато код читаем и легко управляем.. Без компромиссов никак:)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сделать замену внутри нужного фрагмента строки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]