@ -47,17 +47,22 @@ public class Scrubber {
String out = in ;
String out = in ;
for ( Pattern pattern : patterns ) {
for ( Pattern pattern : patterns ) {
Matcher matcher = pattern . matcher ( out ) ;
Matcher matcher = pattern . matcher ( out ) ;
StringBuilder builder = new StringBuilder ( ) ;
int lastEndingPos = 0 ;
while ( matcher . find ( ) ) {
while ( matcher . find ( ) ) {
builder . append ( out . substring ( lastEndingPos , matcher . start ( ) ) ) ;
StringBuilder builder = new StringBuilder ( out . substring ( 0 , matcher . start ( ) ) ) ;
final String censored = matcher . group ( ) . substring ( 0 , 1 ) +
final String censored = matcher . group ( ) . substring ( 0 , 1 ) +
new String ( new char [ matcher . group ( ) . length ( ) - 3 ] ) . replace ( "\0" , "*" ) +
new String ( new char [ matcher . group ( ) . length ( ) - 3 ] ) . replace ( "\0" , "*" ) +
matcher . group ( ) . substring ( matcher . group ( ) . length ( ) - 2 ) ;
matcher . group ( ) . substring ( matcher . group ( ) . length ( ) - 2 ) ;
builder . append ( censored ) ;
builder . append ( censored ) ;
builder . append ( out . substring ( matcher . end ( ) ) ) ;
lastEndingPos = matcher . end ( ) ;
Log . i ( TAG , "replacing a match on /" + pattern . toString ( ) + "/ => " + censored ) ;
Log . i ( TAG , "replacing a match on /" + pattern . toString ( ) + "/ => " + censored ) ;
out = builder . toString ( ) ;
}
}
builder . append ( out . substring ( lastEndingPos ) ) ;
out = builder . toString ( ) ;
}
}
return out ;
return out ;
}
}