throws Throwable
  public static Value trim(String string, @Optional String characters)    throws Throwable  {    boolean []trim;    if (characters == null || characters.equals(""))      trim = TRIM_WHITESPACE;    else      trim = parseCharsetBitmap(characters.toString());    int len = string.length();    int head = 0;    for (; head < len; head++) {      char ch = string.charAt(head);      if (ch >= 256 || ! trim[ch]) {        break;      }    }    int tail = len - 1;    for (; tail >= 0; tail--) {      char ch = string.charAt(tail);      if (ch >= 256 || ! trim[ch]) {        break;      }    }    if (tail < head)      return StringValue.EMPTY;    else {      return new StringValueImpl(string.substring(head, tail + 1));    }  }