String.replace()
String fraze = "Строка {1:2:3}, атататата {4:5:6}!";C помощью реплейса нужно получить несколько вариантов строк. Например Цитата:
Цитата:
Цитата:
Достаю эти подстроки с помощью: Matcher regexMatcher = Pattern.compile("\\{(.*?)\\}").matcher(fraze); while (regexMatcher.find()) { String string[] = regexMatcher.group(0).substring(regexMatcher.group(0).indexOf("{") + 1, regexMatcher.group(0).indexOf("}")).split(":"); } Но, при попытке заменять строки for (String aString : string) { System.out.println(fraze.replace(regexMatcher.group(0), aString)); }Выходит такая ересь: Код:
Строка 1, атататата {4:5:6}! |
Re: String.replace()
Ошибка в том, что ты заменяешь только первое совпадение (group(0)), так что используй Matcher#groupCount().
|
Re: String.replace()
само правило regexp можно составить правильнее, для этих нужд, хотя они если честно не очень ясны.
Нужно получать или заменять то, что находится между символами {}? |
Re: String.replace()
Цитата:
|
Re: String.replace()
Получается вариантов будет 9 в этом примере "Строка {1:2:3}, атататата {4:5:6}!"?
"Строка 1, атататата 4!" "Строка 1, атататата 5!" "Строка 1, атататата 6!" "Строка 2, атататата 4!" "Строка 2, атататата 5!" "Строка 2, атататата 6!" и тд. Или количество элементов между {} всегда одинаковое и делается только первый элемент с первым, второй со вторым и тд? |
Re: String.replace()
Цитата:
|
Re: String.replace()
public static final void main(final String[] args) { final String example = "Stroka {1:gs Om:3}, atatatatat {4:5:gsom}!"; final Pattern r = Pattern.compile("(\\{[0-9A-Za-z\\: ]+\\})"); Matcher m = r.matcher(example); final StringBuffer sb = new StringBuffer(); while (m.find()) { String[] elements = m.group(0).replace("{", "").replace("}", "").split(":"); for(int i = 0; i < elements.length; i++) replace(m, sb, i); } System.out.println(String.format("result:\n%s", sb.toString())); } static void replace(Matcher m, StringBuffer sb, final int index) { m.reset(); while (m.find()) { String[] elements = m.group(0).replace("{", "").replace("}", "").split(":"); m.appendReplacement(sb, elements[index]); } m.appendTail(sb); sb.append("\n"); }с regexp'ом не очень дружу, по быстрому получилось это. |
Re: String.replace()
public class main { public static void main(String[] args) { String sample = "Строка {1:2:3}, атататата {4:5:6}, ололо {7:8:9}"; for (String str : replacer(sample)) { System.out.println(str); } } private static ArrayList<String> replacer(String str) { ArrayList<String> results = new ArrayList<String>(); Pattern pattern = Pattern.compile("(\\{(.*?)\\})"); Matcher matcher = pattern.matcher(str); if (matcher.find()) { String[] nums = matcher.group(2).split(":"); for (String num : nums) { String result = str.replace(matcher.group(1), num); results.addAll(replacer(result)); } } else { results.add(str); } return results; } }Имхо :redlol: Учим мат. часть по рекурсивным функциям. |
Re: String.replace()
оффтоп:Развернуть ↓ |
Re: String.replace()
offtop:Развернуть ↓ |
Текущее время: 23:50. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot