@@ -142,17 +142,24 @@ public SchemaLocation resolve(String absoluteIriReferenceOrFragment) {
142142 return new SchemaLocation (this .getAbsoluteIri (), JSON_POINTER );
143143 }
144144 JsonNodePath fragment = JSON_POINTER ;
145- String [] parts = absoluteIriReferenceOrFragment .split ( "#" );
145+ int index = absoluteIriReferenceOrFragment .indexOf ( '#' );
146146 AbsoluteIri absoluteIri = this .getAbsoluteIri ();
147+ String part0 = index == -1 ? absoluteIriReferenceOrFragment
148+ : absoluteIriReferenceOrFragment .substring (0 , index );
147149 if (absoluteIri != null ) {
148- if (!parts [ 0 ] .isEmpty ()) {
149- absoluteIri = absoluteIri .resolve (parts [ 0 ] );
150+ if (!part0 .isEmpty ()) {
151+ absoluteIri = absoluteIri .resolve (part0 );
150152 }
151153 } else {
152- absoluteIri = AbsoluteIri .of (parts [ 0 ] );
154+ absoluteIri = AbsoluteIri .of (part0 );
153155 }
154- if (parts .length > 1 && !parts [1 ].isEmpty ()) {
155- fragment = Fragment .of (parts [1 ]);
156+ if (index != -1 ) {
157+ if (absoluteIriReferenceOrFragment .length () > index + 1 ) {
158+ String part1 = absoluteIriReferenceOrFragment .substring (index + 1 );
159+ if (!part1 .isEmpty ()) {
160+ fragment = Fragment .of (part1 );
161+ }
162+ }
156163 }
157164 return new SchemaLocation (absoluteIri , fragment );
158165 }
@@ -168,18 +175,26 @@ public static String resolve(SchemaLocation schemaLocation, String absoluteIriRe
168175 if ("#" .equals (absoluteIriReferenceOrFragment )) {
169176 return schemaLocation .getAbsoluteIri ().toString () + "#" ;
170177 }
171- String [] parts = absoluteIriReferenceOrFragment .split ( "#" );
178+ int index = absoluteIriReferenceOrFragment .indexOf ( '#' );
172179 AbsoluteIri absoluteIri = schemaLocation .getAbsoluteIri ();
173- String resolved = parts [0 ];
180+ String part0 = index == -1 ? absoluteIriReferenceOrFragment
181+ : absoluteIriReferenceOrFragment .substring (0 , index );
182+ String resolved = part0 ;
174183 if (absoluteIri != null ) {
175- if (!parts [ 0 ] .isEmpty ()) {
176- resolved = absoluteIri .resolve (parts [ 0 ] ).toString ();
184+ if (!part0 .isEmpty ()) {
185+ resolved = absoluteIri .resolve (part0 ).toString ();
177186 } else {
178187 resolved = absoluteIri .toString ();
179188 }
180189 }
181- if (parts .length > 1 && !parts [1 ].isEmpty ()) {
182- resolved = resolved + "#" + parts [1 ];
190+ String part1 = "" ;
191+ if (index != -1 ) {
192+ if (absoluteIriReferenceOrFragment .length () > index + 1 ) {
193+ part1 = absoluteIriReferenceOrFragment .substring (index + 1 );
194+ }
195+ }
196+ if (!part1 .isEmpty ()) {
197+ resolved = resolved + "#" + part1 ;
183198 } else {
184199 resolved = resolved + "#" ;
185200 }
0 commit comments