stringmodule.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 2,731 行 · 第 1/5 页

JAVA
2,731
字号
          else if (nextCh == 'N') {            char nextnextnextCh;            if (index + 3 < length)              nextnextnextCh = toUpperCase(string.charAt(index + 3));            else              nextnextnextCh = 0;            if (nextnextCh < 'A' || nextnextCh > 'Z') {            }            else if (nextnextCh == 'E' && nextnextnextCh == 'D') {            }            else              result.append('K');          }          else if (prevCh == 'G') {            result.append('K');          }          else {            switch (nextCh) {              case 'E':              case 'I':              case 'Y':                // makesoft                result.append('J');                break;              default:                result.append('K');                break;            }          }          break;        case 'H':        case 'W':        case 'Y':          switch (nextCh) {            case 'A':            case 'E':            case 'I':            case 'O':            case 'U':              // followed by a vowel              if (ch == 'H') {                switch (prevCh) {                  case 'C':                  case 'G':                  case 'P':                  case 'S':                  case 'T':                    // affecth                    break;                  default:                    result.append('H');                    break;                }              }              else                result.append(ch);              break;            default:              // not followed by a vowel              break;          }          break;        case 'K':          if (prevCh != 'C')            result.append('K');          break;        case 'P':          if (nextCh == 'H')            result.append('F');          else            result.append('P');          break;        case 'Q':          result.append('K');          break;        case 'S':          if (nextCh == 'I' && (nextnextCh == 'O' || nextnextCh == 'A')) {            result.append('X');          }          else if (nextCh == 'H') {            result.append('X');            index++;          }          else            result.append('S');          break;        case 'T':          if (nextCh == 'I' && (nextnextCh == 'O' || nextnextCh == 'A')) {            result.append('X');          }          else if (nextCh == 'H') {            result.append('0');            index++;          }          else            result.append('T');          break;        case 'V':          result.append('F');          break;        case 'X':          result.append('K');          result.append('S');          break;        case 'Z':          result.append('S');          break;        case 'F':        case 'J':        case 'L':        case 'M':        case 'N':        case 'R':          result.append(ch);          break;        default:          break;      }    }    return result.toString();  }  /**   * Returns a formatted money value.   * XXX: locale charset   *   * @param format the format   * @param value the value   *   * @return a string of formatted values   */  public static String money_format(Env env, String format, double value)  {    QuercusLocale monetary = env.getLocaleInfo().getMonetary();        Locale locale = monetary.getLocale();    return NumberFormat.getCurrencyInstance(locale).format(value);  }  // XXX: nl_langinfo  // XXX: nl2br  /**   * Returns a formatted number.   *   * @param value the value   * @param decimals the number of decimals   * @param pointValue the decimal point string   * @param groupValue the thousands separator   *   * @return a string of the formatted number   */  public static String number_format(Env env,                                     double value,                                     @Optional int decimals,                                     @Optional Value pointValue,                                     @Optional Value groupValue)  {    boolean isGroupDefault = (groupValue instanceof DefaultValue);    boolean isPointDefault = (pointValue instanceof DefaultValue);    if  (!isPointDefault && isGroupDefault) {      env.warning(L.l("wrong parameter count"));      return null;    }    String pattern;    char point = '.';    if (!pointValue.isNull()) {      String pointString = pointValue.toString();      point =  (pointString.length() == 0) ? 0 : pointString.charAt(0);    }    char group = ',';    if (!groupValue.isNull()) {      String groupString = groupValue.toString();      group = (groupString.length() == 0) ? 0 : groupString.charAt(0);    }    if (decimals > 0) {      StringBuilder patternBuilder = new StringBuilder(6 + decimals);      patternBuilder.append(group == 0 ? "###0." : "#,##0.");      for (int i = 0; i < decimals; i++)        patternBuilder.append('0');      pattern = patternBuilder.toString();    }    else {      pattern = group == 0 ? "###0" : "#,##0";    }    DecimalFormatSymbols decimalFormatSymbols;    if (point == '.' && group == ',')      decimalFormatSymbols = DEFAULT_DECIMAL_FORMAT_SYMBOLS;    else {      decimalFormatSymbols = new DecimalFormatSymbols();      decimalFormatSymbols.setDecimalSeparator(point);      decimalFormatSymbols.setGroupingSeparator(group);      decimalFormatSymbols.setZeroDigit('0');    }    DecimalFormat format = new DecimalFormat(pattern, decimalFormatSymbols);    String result = format.format(value);    if (point == 0 && decimals > 0) {      // no way to get DecimalFormat to output nothing for the point,      // so remove it here      int i = result.lastIndexOf(point);      return result.substring(0, i) + result.substring(i + 1, result.length());    }    else      return result;  } /**   * Converts the first character to an integer.   *   * @param string the string to be converted   *   * @return the integer value   */  public static long ord(StringValue string)  {    if (string.length() == 0)      return 0;    else      return string.charAt(0);  }  /**   * Parses the string as a query string.   *   * @param env the calling environment   * @param str the query string   * @param array the optional result array   */  @UsesSymbolTable  public static Value parse_str(Env env, String str,                                @Optional @Reference Value ref)  {    if (str == null)      str = "";        boolean isRef = ref instanceof Var;    ArrayValue result = null;    if (isRef) {      result = new ArrayValueImpl();      ref.set(result);    }    else if (ref instanceof ArrayValue) {      result = (ArrayValue) ref;      isRef = true;    }    else      result = new ArrayValueImpl();          return StringUtility.parseStr(env,                                  str,                                  result,                                  isRef,                                  env.getHttpInputEncoding());  }  /**   * Prints the string.   *   * @param env the quercus environment   * @param value the string to print   */  public static long print(Env env, Value value)  {    value.print(env);    return 1;  }    /**   * print to the output with a formatter   *   * @param env the quercus environment   * @param format the format string   * @param args the format arguments   *   * @return the formatted string   */  public static int printf(Env env, StringValue format, Value []args)  {    Value str = sprintf(env, format, args);    str.print(env);    return str.length();  }  /**   * Converts a RFC2045 quoted printable string to a string.   */  // XXX: i18n  public static String quoted_printable_decode(String str)  {    if (str == null)      str = "";        StringBuilder sb = new StringBuilder();    int length = str.length();    for (int i = 0; i < length; i++) {      char ch = str.charAt(i);      if (33 <= ch && ch <= 60)	sb.append(ch);      else if (62 <= ch && ch <= 126)	sb.append(ch);      else if (ch == ' ' || ch == '\t') {	if (i + 1 < str.length() &&	    (str.charAt(i + 1) == '\r' || str.charAt(i + 1) == '\n')) {	  sb.append('=');	  sb.append(toUpperHexChar(ch >> 4));	  sb.append(toUpperHexChar(ch));	}	else	  sb.append(ch);      }      else if (ch == '\r' || ch == '\n') {	sb.append(ch);      }      else {	sb.append('=');	sb.append(toUpperHexChar(ch >> 4));	sb.append(toUpperHexChar(ch));      }    }    return sb.toString();  }  /**   * Escapes meta characters.   *   * @param string the string to be quoted   *   * @return the quoted   */  public static Value quotemeta(StringValue string)  {    int len = string.length();        StringValue sb = string.createStringBuilder(len * 5 / 4);    for (int i = 0; i < len; i++) {      char ch = string.charAt(i);      switch (ch) {      case '.': case '\\': case '+': case '*': case '?':      case '[': case '^': case ']': case '(': case ')': case '$':        sb.append("\\");        sb.append(ch);        break;      default:        sb.append(ch);        break;      }    }    return sb;  }  private static final boolean[]TRIM_WHITESPACE = new boolean[256];  static {    TRIM_WHITESPACE['\0'] = true;    TRIM_WHITESPACE['\b'] = true;    TRIM_WHITESPACE[' '] = true;    TRIM_WHITESPACE['\t'] = true;    TRIM_WHITESPACE['\r'] = true;    TRIM_WHITESPACE['\n'] = true;  }  /**   * Removes trailing whitespace.   *   * @param env the quercus environment   * @param string the string to be trimmed   * @param characters optional set of characters to trim   * @return the trimmed string   */  public static StringValue rtrim(Env env,				  StringValue string,				  @Optional String characters)  {    if (characters == null)      characters = "";        boolean []trim;    if (characters.equals(""))      trim = TRIM_WHITESPACE;    else      trim = parseCharsetBitmap(characters);    for (int i = string.length() - 1; i >= 0; i--) {      char ch = string.charAt(i);      if (ch >= 256 || ! trim[ch]) {        if (i == string.length())          return string;        else          return (StringValue) string.subSequence(0, i + 1);      }    }    return env.getEmptyString();  }  /**   * Sets locale configuration.   */  public static Value setlocale(Env env,                                int category,                                Value localeArg,                                Value []fallback)  {    LocaleInfo localeInfo = env.getLocaleInfo();    if (localeArg instanceof ArrayValue) {      for (Value value : ((ArrayValue) localeArg).values()) {        QuercusLocale locale = setLocale(localeInfo,                                         category,                                         value.toString());        if (locale != null)          return env.createString(locale.toString());      }    }    else {      QuercusLocale locale = setLocale(localeInfo,                                       category,                                       localeArg.toString());      if (locale != null)        return env.createString(locale.toString());    }    for (int i = 0; i < fallback.length; i++) {      QuercusLocale locale = setLocale(localeInfo,                                       category,                                       fallback[i].toString());      if (locale != null)        return env.createString(locale.toString());    }    return BooleanValue.FALSE;  }  /**   * Sets locale configuration.   */  private static QuercusLocale setLocale(LocaleInfo localeInfo,                                         int category,                                         String localeName)  {     QuercusLocale locale = findLocale(localeName);        if (locale == null)      return null;    switch (category) {    case LC_ALL:      localeInfo.setAll(locale);      return localeInfo.getMessages();    case LC_COLLATE:      localeInfo.setCollate(locale);      return localeInfo.getCollate();    case LC_CTYPE:      localeInfo.setCtype(locale);      return localeInfo.getCtype();    case LC_MONETARY:      localeInfo.setMonetary(locale);      return localeInfo.getMonetary();    case LC_NUMERIC:      localeInfo.setNumeric(locale);      return localeInfo.getNumeric();    case LC_TIME:      localeInfo.setTime(locale);      return localeInfo.getTime();    case LC_MESSAGES:      localeInfo.setMessages(locale);      return localeInfo.getMessages();    default:      return null;    }  }  /*   * Example locale: fr_FR.UTF-8@euro, french (on Windows)   * (French, France, UTF-8, with euro currency support)   */  private static QuercusLocale findLocale(String localeName)  {    String language;    String country;    String charset = null;    String variant = null;    CharBuffer sb = CharBuffer.allocate();        int len = localeName.length();    int i = 0;    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?