// 012345678
 // aa bb cc
 public void testReplaceByEmpty() throws IOException {
   final String BLOCK = "aa bb cc";
   PatternReplaceCharFilterFactory factory = new PatternReplaceCharFilterFactory();
   Map<String, String> args = new HashMap<String, String>();
   args.put("pattern", "(aa)\\s+(bb)\\s+(cc)");
   factory.init(args);
   CharStream cs = factory.create(CharReader.get(new StringReader(BLOCK)));
   TokenStream ts = new MockTokenizer(cs, MockTokenizer.WHITESPACE, false);
   assertTokenStreamContents(ts, new String[] {});
 }
 // 012345678
 // aa bb cc
 // aa#bb#cc
 public void test1block1matchSameLength() throws IOException {
   final String BLOCK = "aa bb cc";
   PatternReplaceCharFilterFactory factory = new PatternReplaceCharFilterFactory();
   Map<String, String> args = new HashMap<String, String>();
   args.put("pattern", "(aa)\\s+(bb)\\s+(cc)");
   args.put("replacement", "$1#$2#$3");
   factory.init(args);
   CharStream cs = factory.create(CharReader.get(new StringReader(BLOCK)));
   TokenStream ts = new MockTokenizer(cs, MockTokenizer.WHITESPACE, false);
   assertTokenStreamContents(
       ts, new String[] {"aa#bb#cc"}, new int[] {0}, new int[] {8}, BLOCK.length());
 }
 //           1111
 // 01234567890123
 // this is test.
 public void testNothingChange() throws IOException {
   final String BLOCK = "this is test.";
   PatternReplaceCharFilterFactory factory = new PatternReplaceCharFilterFactory();
   Map<String, String> args = new HashMap<String, String>();
   args.put("pattern", "(aa)\\s+(bb)\\s+(cc)");
   args.put("replacement", "$1$2$3");
   factory.init(args);
   CharStream cs = factory.create(CharReader.get(new StringReader(BLOCK)));
   TokenStream ts = new MockTokenizer(cs, MockTokenizer.WHITESPACE, false);
   assertTokenStreamContents(
       ts,
       new String[] {"this", "is", "test."},
       new int[] {0, 5, 8},
       new int[] {4, 7, 13},
       BLOCK.length());
 }