From b6c4a9a2a0479edf285e501b97c54e4f4575186b Mon Sep 17 00:00:00 2001 From: bjculkin Date: Thu, 6 Apr 2017 17:23:34 -0400 Subject: Convert doubles to properties --- .../java/bjc/utils/parserutils/DoubleMatcher.java | 82 +++++++--------------- 1 file changed, 27 insertions(+), 55 deletions(-) (limited to 'BJC-Utils2/src/main/java/bjc/utils/parserutils') diff --git a/BJC-Utils2/src/main/java/bjc/utils/parserutils/DoubleMatcher.java b/BJC-Utils2/src/main/java/bjc/utils/parserutils/DoubleMatcher.java index 63eabca..83d2d2a 100644 --- a/BJC-Utils2/src/main/java/bjc/utils/parserutils/DoubleMatcher.java +++ b/BJC-Utils2/src/main/java/bjc/utils/parserutils/DoubleMatcher.java @@ -2,70 +2,42 @@ package bjc.utils.parserutils; import java.util.regex.Pattern; +import static bjc.utils.PropertyDB.*; + /* * Checks if a string would pass Double.parseDouble. * * Uses a regex from the javadoc for Double.valueOf() */ class DoubleMatcher { - private static final String Digits = "(\\p{Digit}+)"; - private static final String HexDigits = "(\\p{XDigit}+)"; - /* - * an exponent is 'e' or 'E' followed by an optionally signed decimal - * integer. + * Unit pieces. */ - private static final String Exp = "[eE][+-]?" + Digits; - - private static final String fpRegex = - "[\\x00-\\x20]*" // Optional leading "whitespace" - + "[+-]?(" + // Optional sign character - "NaN|" + // "NaN" string - "Infinity|" + // "Infinity" string - - /* - * A decimal floating-point string representing a finite - * positive number without a leading sign has at most - * five basic pieces: Digits . Digits ExponentPart - * FloatTypeSuffix - * - * Since this method allows integer-only strings as - * input in addition to strings of floating-point - * literals, the two sub-patterns below are - * simplifications of the grammar productions from - * section 3.10.2 of The Java™ Language Specification. - */ - - /* - * Digits ._opt Digits_opt ExponentPart_opt - * FloatTypeSuffix_opt - */ - "(((" + Digits + "(\\.)?(" + Digits + "?)(" + Exp + ")?)|" + - - /* - * . Digits ExponentPart_opt FloatTypeSuffix_opt - */ - "(\\.(" + Digits + ")(" + Exp + ")?)|" + + private static final String DecDigits = getRegex("fpDigits"); + private static final String HexDigits = getRegex("fpHexDigits"); + private static final String Exponent = applyFormat("fpExponent", getRegex("fpExponent"), DecDigits); - /* - * Hexadecimal strings - */ - "((" + - /* - * 0[xX] HexDigits ._opt BinaryExponent - * FloatTypeSuffix_opt - */ - "(0[xX]" + HexDigits + "(\\.)?)|" + + /* + * Decimal floating point numbers. + */ + private static final String SIMPLE_DEC = applyFormat("fpDecimalDecimal", DecDigits, Exponent); + private static final String SIMPLE_INTDEC = applyFormat("fpDecimalInteger", DecDigits, Exponent); - /* - * 0[xX] HexDigits_opt . HexDigits BinaryExponent - * FloatTypeSuffix_opt - */ - "(0[xX]" + HexDigits + "?(\\.)" + HexDigits + ")" + + /* + * Hex floating point numbers. + */ + private static final String HEX_INT = applyFormat("fpHexInteger", HexDigits); + private static final String HEX_DEC = applyFormat("fpHexDecimal", HexDigits); + private static final String HEX_LEAD = applyFormat("fpHexLeader", HEX_INT, HEX_DEC); + private static final String HEX_STRING = applyFormat("fpHexString", HEX_LEAD, DecDigits); - ")[pP][+-]?" + Digits + "))" + "[fFdD]?))" + "[\\x00-\\x20]*"; // Optional - // trailing - // "whitespace" + /* + * Floating point components. + */ + private static final String FP_LEADER = getRegex("fpLeader"); + private static final String FP_NUM = applyFormat("fpNumber", SIMPLE_INTDEC, SIMPLE_DEC, + HEX_STRING); - public static final Pattern floatingLiteral = Pattern.compile("\\A" + fpRegex + "\\Z"); -} + private static final String fpRegex = applyFormat("fpDouble", FP_LEADER, FP_NUM); + public static final Pattern floatingLiteral = Pattern.compile("\\A" + fpRegex + "\\Z"); +} \ No newline at end of file -- cgit v1.2.3