private String createMessage(final String msg) { return createMessage(msg, null, lineno, colno); }
@Test public void testParse() throws Exception { final StringReader in = new StringReader( replaceQuotationMark("a1=,a2='1970-11-21 13:17:57.742',a3=5,a4='Hallo',a5='Hallo ''Kai''',a6=1.2")); final KeyValuePairParser parser = new KeyValuePairParser(in); final Map<String, String> pairs = parser.parse(); Assert.assertEquals(6, pairs.size()); Assert.assertNull(pairs.get("a1")); Assert.assertEquals("1970-11-21 13:17:57.742", pairs.get("a2")); Assert.assertEquals(5, parser.getInteger("a3").intValue()); Assert.assertEquals("Hallo", pairs.get("a4")); Assert.assertEquals("Hallo \"Kai\"", pairs.get("a5")); Assert.assertEquals(new BigDecimal("1.2"), parser.getBigDecimal("a6")); } }
public String parseKey() { skipWhitespaces(); final StringBuffer buf = new StringBuffer(); while (true) { nextToken(); if (type != Type.CHAR) { if (buf.length() > 0) { throw new RuntimeException(createMessage(ERROR_INVALID_KEY, buf.toString())); } return null; } if (cval == '=') { break; } else { buf.append(cval); } } return buf.toString(); }
/** * Returns null, if EOF. * @return */ public Map<String, String> parse() { if (type == Type.EOF) { return null; } keyValuePairs = null; do { final String key = parseKey(); final String value = parseValue(); if (key != null) { if (keyValuePairs == null) { keyValuePairs = new HashMap<String, String>(); } keyValuePairs.put(key, value); } } while (type != Type.EOF && type != Type.EOL); return keyValuePairs; }
skipWhitespaces(); nextToken(); if (type != Type.CHAR || cval == pairsSeparatorChar) { return null; if (cval == '"') { quoted = true; // value is quoted. nextToken(); if (type != Type.CHAR) { if (quoted == true) { throw new RuntimeException(createMessage(ERROR_QUOTATIONMARK_MISSED_AT_END_OF_CELL)); throw new RuntimeException(createMessage(ERROR_UNEXPECTED_QUOTATIONMARK, buf.toString())); nextToken(); if (type != Type.CHAR || cval == pairsSeparatorChar) { // End of cell break; buf.append(cval); } else if (Character.isWhitespace(cval) == true) { skipWhitespaces(); nextToken(); if (type != Type.CHAR || cval == pairsSeparatorChar) { break; } else { throw new RuntimeException(createMessage(ERROR_DELIMITER_OR_NEW_LINE_EXPECTED_AFTER_QUOTATION_MARK)); throw new RuntimeException(createMessage(ERROR_UNEXPECTED_CHARACTER_AFTER_QUOTATION_MARK));
private String createMessage(final String msg, final String s) { return createMessage(msg, s, lineno, colno); }