Можно ли использовать номер текущей замены в String.replaceAll? - PullRequest
3 голосов
/ 15 декабря 2011

Можно ли сделать так, чтобы String.replaceAll поместил номер (количество) текущей замены в выполняемую замену?

Так что "qqq".replaceAll("(q)", "something:$1 ") приведет к "1:q 2:q 3:q"?

Есть ли что-нибудь, что я могу заменить чем-то в приведенном выше коде, чтобы преобразовать его в текущий счет замещения?

Ответы [ 3 ]

3 голосов
/ 15 декабря 2011

Вот один из способов сделать это:

StringBuffer resultString = new StringBuffer();
String subjectString = new String("qqqq");
Pattern regex = Pattern.compile("q");
Matcher regexMatcher = regex.matcher(subjectString);
int i = 1;
while (regexMatcher.find()) {
   regexMatcher.appendReplacement(resultString, i+":"+regexMatcher.group(1)+" ");
   i++;
}
regexMatcher.appendTail(resultString);
System.out.println(resultString);

Смотри

1 голос
/ 15 декабря 2011

Нет, не по методу replaceAll.Единственная обратная ссылка - \n, где n - соответствующая n-я группа захвата.

0 голосов
/ 15 декабря 2011

Для этого вам нужно создать собственный метод replaceAll () .

Это поможет вам:

public class StartTheClass 
{       
public static void main(String[] args) 
{       
    String string="wwwwww";
    System.out.println("Replaced As: \n"+replaceCharector(string, "ali:", 'w'));    
}

public static String replaceCharector(String original, String replacedWith, char toReplaceChar)
{
    int count=0;
    String str = "";
    for(int i =0; i < original.length(); i++)
    {

        if(original.charAt(i) == toReplaceChar)
        {
            str += replacedWith+(count++)+" ";//here add the 'count' value and some space;
        }
        else
        {
            str += original.charAt(i);
        }

    }
    return str;
}   
}

Вывод, который я получил:

Заменяется как:

Али: 0 Али: 1 Али: 2 Али: 3 Али: 4 Али: 5

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