| OLD | NEW |
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * [StringBase] contains common methods used by concrete String implementations, | 6 * [StringBase] contains common methods used by concrete String implementations, |
| 7 * e.g., OneByteString. | 7 * e.g., OneByteString. |
| 8 */ | 8 */ |
| 9 class StringBase { | 9 class StringBase { |
| 10 | 10 |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 } | 191 } |
| 192 } | 192 } |
| 193 | 193 |
| 194 bool contains(Pattern other, [int startIndex = 0]) { | 194 bool contains(Pattern other, [int startIndex = 0]) { |
| 195 if (other is String) { | 195 if (other is String) { |
| 196 return indexOf(other, startIndex) >= 0; | 196 return indexOf(other, startIndex) >= 0; |
| 197 } | 197 } |
| 198 return other.allMatches(this.substring(startIndex)).iterator().hasNext(); | 198 return other.allMatches(this.substring(startIndex)).iterator().hasNext(); |
| 199 } | 199 } |
| 200 | 200 |
| 201 String replaceFirst(Pattern from, String to) { | 201 String replaceFirst(Pattern pattern, String to) { |
| 202 if (from is RegExp) { | 202 if (pattern is RegExp) { |
| 203 throw "Unimplemented String.replace with RegExp"; | 203 StringBuffer buffer = new StringBuffer(); |
| 204 int startIndex = 0; |
| 205 Match match = pattern.firstMatch(this); |
| 206 if (match != null) { |
| 207 buffer.add(this.substring(startIndex, match.start())).add(to); |
| 208 startIndex = match.end(); |
| 209 } |
| 210 return buffer.add(this.substring(startIndex)).toString(); |
| 204 } | 211 } |
| 205 int pos = this.indexOf(from, 0); | 212 int pos = this.indexOf(pattern, 0); |
| 206 if (pos < 0) { | 213 if (pos < 0) { |
| 207 return this; | 214 return this; |
| 208 } | 215 } |
| 209 String s1 = this.substring(0, pos); | 216 String s1 = this.substring(0, pos); |
| 210 String s2 = this.substring(pos + from.length, this.length); | 217 String s2 = this.substring(pos + pattern.length, this.length); |
| 211 return s1.concat(to.concat(s2)); | 218 return s1.concat(to.concat(s2)); |
| 212 } | 219 } |
| 213 | 220 |
| 214 String replaceAll(Pattern from_, String to) { | 221 String replaceAll(Pattern pattern, String to) { |
| 215 if (from_ is RegExp) { | 222 if (pattern is RegExp) { |
| 216 throw "Unimplemented String.replaceAll with RegExp"; | 223 StringBuffer buffer = new StringBuffer(); |
| 224 int startIndex = 0; |
| 225 for (Match match in pattern.allMatches(this)) { |
| 226 buffer.add(this.substring(startIndex, match.start())).add(to); |
| 227 startIndex = match.end(); |
| 228 } |
| 229 return buffer.add(this.substring(startIndex)).toString(); |
| 217 } | 230 } |
| 218 String from = from_; | 231 String from = pattern; |
| 219 int fromLength = from.length; | 232 int fromLength = from.length; |
| 220 int toLength = to.length; | 233 int toLength = to.length; |
| 221 int thisLength = this.length; | 234 int thisLength = this.length; |
| 222 | 235 |
| 223 StringBuffer result = new StringBuffer(""); | 236 StringBuffer result = new StringBuffer(""); |
| 224 // Special case the empty string replacement where [to] is | 237 // Special case the empty string replacement where [to] is |
| 225 // inserted in between each character. | 238 // inserted in between each character. |
| 226 if (fromLength === 0) { | 239 if (fromLength === 0) { |
| 227 result.add(to); | 240 result.add(to); |
| 228 for (int i = 0; i < thisLength; i++) { | 241 for (int i = 0; i < thisLength; i++) { |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 while (ix < str.length) { | 307 while (ix < str.length) { |
| 295 int foundIx = str.indexOf(this, ix); | 308 int foundIx = str.indexOf(this, ix); |
| 296 if (foundIx < 0) break; | 309 if (foundIx < 0) break; |
| 297 result.add(new _StringMatch(foundIx, str, this)); | 310 result.add(new _StringMatch(foundIx, str, this)); |
| 298 ix = foundIx + length; | 311 ix = foundIx + length; |
| 299 } | 312 } |
| 300 return result; | 313 return result; |
| 301 } | 314 } |
| 302 | 315 |
| 303 List<String> split(Pattern pattern) { | 316 List<String> split(Pattern pattern) { |
| 317 List<String> result = new List<String>(); |
| 304 if (pattern is RegExp) { | 318 if (pattern is RegExp) { |
| 305 throw "Unimplemented split with RegExp"; | 319 int startIndex = 0; |
| 320 for (Match match in pattern.allMatches(this)) { |
| 321 result.add(this.substring(startIndex, match.start())); |
| 322 startIndex = match.end(); |
| 323 } |
| 324 result.add(this.substring(startIndex)); |
| 325 return result; |
| 306 } | 326 } |
| 307 List<String> result = new List<String>(); | |
| 308 if (pattern.isEmpty()) { | 327 if (pattern.isEmpty()) { |
| 309 for (int i = 0; i < this.length; i++) { | 328 for (int i = 0; i < this.length; i++) { |
| 310 result.add(this.substring(i, i+1)); | 329 result.add(this.substring(i, i+1)); |
| 311 } | 330 } |
| 312 return result; | 331 return result; |
| 313 } | 332 } |
| 314 int ix = 0; | 333 int ix = 0; |
| 315 while (ix < this.length) { | 334 while (ix < this.length) { |
| 316 int foundIx = this.indexOf(pattern, ix); | 335 int foundIx = this.indexOf(pattern, ix); |
| 317 if (foundIx < 0) { | 336 if (foundIx < 0) { |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 for (int g in groups) { | 533 for (int g in groups) { |
| 515 result.add(group(g)); | 534 result.add(group(g)); |
| 516 } | 535 } |
| 517 return result; | 536 return result; |
| 518 } | 537 } |
| 519 | 538 |
| 520 final int _start; | 539 final int _start; |
| 521 final String str; | 540 final String str; |
| 522 final String pattern; | 541 final String pattern; |
| 523 } | 542 } |
| OLD | NEW |