@@ -24,18 +24,7 @@ private String buildPatternLevel1(String path) {
2424 String regex = "\\ *\\ *\\ ." ;
2525 String replacement = "(?:.+\\ .)?" ;
2626
27- StringBuilder sb = new StringBuilder ();
28- String [] parts = path .split (regex );
29- for (int i = 0 ; i < parts .length ; i ++) {
30- String part = parts [i ];
31-
32- sb .append (buildPatternLevel2 (part ));
33- if (i < parts .length - 1 ) {
34- sb .append (replacement );
35- }
36- }
37-
38- return sb .toString ();
27+ return buildPattern (path , regex , replacement , 1 );
3928 }
4029
4130 private String buildPatternLevel2 (String s ) {
@@ -45,17 +34,7 @@ private String buildPatternLevel2(String s) {
4534 String regex = "\\ *\\ *" ;
4635 String replacement = ".+" ;
4736
48- StringBuilder sb = new StringBuilder ();
49- String [] parts = s .split (regex );
50- for (int i = 0 ; i < parts .length ; i ++) {
51- String part = parts [i ];
52-
53- sb .append (buildPatternLevel3 (part ));
54- if (i < parts .length - 1 ) {
55- sb .append (replacement );
56- }
57- }
58- return sb .toString ();
37+ return buildPattern (s , regex , replacement , 2 );
5938 }
6039
6140 private String buildPatternLevel3 (String s ) {
@@ -66,19 +45,41 @@ private String buildPatternLevel3(String s) {
6645 String regex = "\\ *" ;
6746 String replacement = "[^\\ .]+" ;
6847
48+ return buildPattern (s , regex , replacement , 3 );
49+ }
50+
51+ private String buildPattern (String path , String regex , String replacement , int level ) {
6952 StringBuilder sb = new StringBuilder ();
70- String [] parts = s .split (regex );
53+ String [] parts = path .split (regex );
7154 for (int i = 0 ; i < parts .length ; i ++) {
72- String part = parts [i ];
73-
74- sb .append (Pattern .quote (part ));
55+ sb .append (buildPatternForLevel (level , parts [i ]));
7556 if (i < parts .length - 1 ) {
7657 sb .append (replacement );
77- }
78- }
58+ }
59+ }
7960 return sb .toString ();
8061 }
8162
63+ private String buildPatternForLevel (int level , String part ) {
64+ switch (level ) {
65+ case 1 :
66+ return buildPatternLevel2 (part );
67+ case 2 :
68+ return buildPatternLevel3 (part );
69+ case 3 :
70+ return Pattern .quote (part );
71+ default :
72+ return "Incorrect level." ;
73+ }
74+ }
75+
76+ /**
77+ * Creates a new {@link Customization} instance for {@code path} and {@code comparator}.
78+ *
79+ * @param path the json path
80+ * @param comparator the comparator
81+ * @return a new Customization
82+ */
8283 public static Customization customization (String path , ValueMatcher <Object > comparator ) {
8384 return new Customization (path , comparator );
8485 }
0 commit comments