code: public static final NumericalValueRange parseNumericalValueRange (final String value) {
          // check formatting
          final Matcher rangeMatcher = NUMERICAL_RANGE_PATTERN.matcher(value);
          if (!rangeMatcher.matches()) { return null; }
          int min, max;
  
          // split parameter at '~' sign and parse boundaries individually
          String[] numbers = value.split("~");
          final SingleNumericalValue minVal = SingleNumericalValue.parseSingleNumericValue(numbers[0]);
          final SingleNumericalValue maxVal = SingleNumericalValue.parseSingleNumericValue(numbers[1]);
          if (minVal == null || maxVal == null) return null;// not possible, format checked by rangeMatcher
          min = minVal.getValue();
          max = maxVal.getValue();
  
          // return with sanity check, enforce min <= max
          return create(min, max);
      }
docs: Parses a {@link NumericalValueRange} from a {@link String}. The lower and boundaries must be separated by a '~'
  character and the the leading integer must not be larger than the trailing one. If these format requirements are
  violated the method will return <code>null</code>.
  
  @param value the {@link String} to parse
  @return a {@link NumericalValueRange} representing the interval in the parsed {@link String} or <code>null</code>