/** * Construct a <code>RollInfo</code> from a string. The rules: * * <ol> * <li>Optional positive integer, <var>times</var>. * <li>Literal 'd' followed by positive integer, <var>sides</var>. * <li>Optional literal '/' followed by positive integer, <var>keepTop</var>, or literal '\' * followed by positive integer, <var>keepBottom</var>, or literal '|' followed by * comma-separated list of postitive integers, <var>keepList</var> (1-indexed after dice * have been sorted). * <li>Optional literal 'm' (minimum) followed by positive integer, <var>rerollAbove</var>, or * literal 'M' (maximum) followed by postive integer, <var>rerollBelow</var>. * <li>Optional literal '+' or '-' followed by positive integer, <var>modifier</var>. * <li>Optional literal 't' followed by positive integer, <var>totalFloor</var>, or literal 'T' * followed by a positive *integer, <var>totalCeiling</var>. * </ol> * * Unlike previous versions of this method, it is <strong>case-sensitive</strong> with respect to * the alphabetic characters, e.g., only <code>d</code> (lower-case) is now valid, not also <code> * D</code> (upper-case). This is to accommodate the expanded ways to roll. * * @param rollString String compact representation of dice rolls */ public RollInfo(final String rollString) { String errMsg = RollInfo.parseRollInfo(this, rollString); if (!StringUtils.isBlank(errMsg)) { Logging.errorPrint(errMsg); } }