LINUX.ORG.RU

История изменений

Исправление asaw, (текущая версия) :

Проход там скорее всего вообще один, а работает примерно так:

import java.util.regex.*;

class HelloWorld {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("Z*");
        Matcher matcher = pattern.matcher("bcZZdef");
        boolean b;
        while(b = matcher.find()) {
            System.out.println(matcher.start() + ": \"" + matcher.group() + "\"");
        }
        System.out.println("bcZZdef".replaceAll("Z*", "!"));
    }
}
0: ""                                                                                                                                                                                                 
1: ""                                                                                                                                                                                                 
2: "ZZ"                                                                                                                                                                                               
4: ""                                                                                                                                                                                                 
5: ""                                                                                                                                                                                                 
6: ""                                                                                                                                                                                                 
7: ""                                                                                                                                                                                                 
!b!c!!d!e!f! 

То есть строка последовательно перебирается, а все найденные группы заменяются и формируется новая строка.

Исправление asaw, :

Проход там скорее всего вообще один, а работает примерно так:

import java.util.regex.*;

class HelloWorld {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("Z*");
        Matcher matcher = pattern.matcher("bcZZdef");
        boolean b;
        while(b = matcher.find()) {
            System.out.println(matcher.start() + ": \"" + matcher.group() + "\"");
        }
        System.out.println("bcZZdef".replaceAll("Z*", "!"));
    }
}
0: ""                                                                                                                                                                                                 
1: ""                                                                                                                                                                                                 
2: "ZZ"                                                                                                                                                                                               
4: ""                                                                                                                                                                                                 
5: ""                                                                                                                                                                                                 
6: ""                                                                                                                                                                                                 
7: ""                                                                                                                                                                                                 
!b!c!!d!e!f! 

То есть строка последовательно перебирается, а затем все найденные группы скопом заменяются и формируется новая строка.

Исходная версия asaw, :

Проход там скорее всего вообще один, а работает примерно так:

import java.util.regex.*;

class HelloWorld {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("Z*");
        Matcher matcher = pattern.matcher("bcdef");
        boolean b;
        while(b = matcher.find()) {
            System.out.println(matcher.start() + ": \"" + matcher.group() + "\"");
        }
        System.out.println("bcdef".replaceAll("Z*", "!"));
    }
}
0: ""                                                                                                                                                                                                 
1: ""                                                                                                                                                                                                 
2: ""                                                                                                                                                                                                 
3: ""                                                                                                                                                                                                 
4: ""                                                                                                                                                                                                 
5: ""                                                                                                                                                                                                 
!b!c!d!e!f!

То есть строка последовательно перебирается, а затем все найденные группы скопом заменяются и формируется новая строка.