diff options
author | Tom Tromey <tromey@redhat.com> | 2005-08-25 02:04:35 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2005-08-25 02:04:35 +0000 |
commit | 312fdfbceb8c46cda6d44e19c9af6eb58ee9c057 (patch) | |
tree | 38fab4196f8fc9124f5a7a296ee0346d4e21abb7 /java/text/SimpleDateFormat.java | |
parent | a66a4532cfe2d3202014fe32cb10717eceef3a59 (diff) | |
download | classpath-312fdfbceb8c46cda6d44e19c9af6eb58ee9c057.tar.gz |
* java/text/SimpleDateFormat.java (compileFormat): Correctly
handle quoted single quotes. PR classspath/23183.
Diffstat (limited to 'java/text/SimpleDateFormat.java')
-rw-r--r-- | java/text/SimpleDateFormat.java | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/java/text/SimpleDateFormat.java b/java/text/SimpleDateFormat.java index 12ea95484..c0c4cf68c 100644 --- a/java/text/SimpleDateFormat.java +++ b/java/text/SimpleDateFormat.java @@ -314,16 +314,33 @@ public class SimpleDateFormat extends DateFormat { // Quoted text section; skip to next single quote pos = pattern.indexOf('\'', i + 1); - if (pos == -1) + // First look for '' -- meaning a single quote. + if (pos == i + 1) + tokens.add("'"); + else { - throw new IllegalArgumentException("Quotes starting at character " - + i + " not closed."); + // Look for the terminating quote. However, if we + // see a '', that represents a literal quote and + // we must iterate. + StringBuffer buf = new StringBuffer(); + int oldPos = i + 1; + do + { + if (pos == -1) + throw new IllegalArgumentException("Quotes starting at character " + + i + + " not closed."); + buf.append(pattern.substring(oldPos, pos)); + if (pos + 1 >= pattern.length() + || pattern.charAt(pos + 1) != '\'') + break; + buf.append('\''); + oldPos = pos + 2; + pos = pattern.indexOf('\'', pos + 2); + } + while (true); + tokens.add(buf.toString()); } - if ((pos + 1 < pattern.length()) - && (pattern.charAt(pos + 1) == '\'')) - tokens.add(pattern.substring(i + 1, pos + 1)); - else - tokens.add(pattern.substring(i + 1, pos)); i = pos; } else |