code: public void remove(Range operand, List<Range> result) {
          // a piece left of operand
          // |--this--|
          //     |--op--|
          // |--|
          if (first < operand.first) {
              result.add(new Range(first, (char) (operand.first - 1)));
          }
  
          // a piece right of operand
          //   |--this--|
          // |--op--|
          //         |--|
          if (operand.last < last) {
              result.add(new Range((char) (operand.last + 1), last));
          }
  
          // result is not changes this is completly covered by operand
      }
docs: only valid if this.and(operand) is not empty!