⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xstringforfsb.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    return len1 - len2;  }  /**   * Compares two strings lexicographically, ignoring case considerations.   * This method returns an integer whose sign is that of   * <code>this.toUpperCase().toLowerCase().compareTo(   * str.toUpperCase().toLowerCase())</code>.   * <p>   * Note that this method does <em>not</em> take locale into account,   * and will result in an unsatisfactory ordering for certain locales.   * The java.text package provides <em>collators</em> to allow   * locale-sensitive ordering.   *   * @param   xstr   the <code>String</code> to be compared.   *   * @return  a negative integer, zero, or a positive integer as the   *          the specified String is greater than, equal to, or less   *          than this String, ignoring case considerations.   * @see     java.text.Collator#compare(String, String)   * @since   1.2   */  public int compareToIgnoreCase(XMLString xstr)  {    int len1 = m_length;    int len2 = xstr.length();    int n = Math.min(len1, len2);    FastStringBuffer fsb = fsb();    int i = m_start;    int j = 0;    while (n-- != 0)    {      char c1 = Character.toLowerCase(fsb.charAt(i));      char c2 = Character.toLowerCase(xstr.charAt(j));      if (c1 != c2)      {        return c1 - c2;      }      i++;      j++;    }    return len1 - len2;  }  /**   * Returns a hashcode for this string. The hashcode for a   * <code>String</code> object is computed as   * <blockquote><pre>   * s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]   * </pre></blockquote>   * using <code>int</code> arithmetic, where <code>s[i]</code> is the   * <i>i</i>th character of the string, <code>n</code> is the length of   * the string, and <code>^</code> indicates exponentiation.   * (The hash value of the empty string is zero.)   *   * @return  a hash code value for this object.   */  public int hashCode()  {    // Commenting this out because in JDK1.1.8 and VJ++    // we don't match XMLStrings. Defaulting to the super    // causes us to create a string, but at this point    // this only seems to get called in key processing.    // Maybe we can live with it?    /*    int h = m_hash;    if (h == 0)    {      int off = m_start;      int len = m_length;      FastStringBuffer fsb = fsb();      for (int i = 0; i < len; i++)      {        h = 31 * h + fsb.charAt(off);        off++;      }      m_hash = h;    }    */    return super.hashCode(); // h;  }  /**   * Tests if this string starts with the specified prefix beginning   * a specified index.   *   * @param   prefix    the prefix.   * @param   toffset   where to begin looking in the string.   * @return  <code>true</code> if the character sequence represented by the   *          argument is a prefix of the substring of this object starting   *          at index <code>toffset</code>; <code>false</code> otherwise.   *          The result is <code>false</code> if <code>toffset</code> is   *          negative or greater than the length of this   *          <code>String</code> object; otherwise the result is the same   *          as the result of the expression   *          <pre>   *          this.subString(toffset).startsWith(prefix)   *          </pre>   * @exception java.lang.NullPointerException if <code>prefix</code> is   *          <code>null</code>.   */  public boolean startsWith(XMLString prefix, int toffset)  {    FastStringBuffer fsb = fsb();    int to = m_start + toffset;    int tlim = m_start + m_length;    int po = 0;    int pc = prefix.length();    // Note: toffset might be near -1>>>1.    if ((toffset < 0) || (toffset > m_length - pc))    {      return false;    }    while (--pc >= 0)    {      if (fsb.charAt(to) != prefix.charAt(po))      {        return false;      }      to++;      po++;    }    return true;  }  /**   * Tests if this string starts with the specified prefix.   *   * @param   prefix   the prefix.   * @return  <code>true</code> if the character sequence represented by the   *          argument is a prefix of the character sequence represented by   *          this string; <code>false</code> otherwise.   *          Note also that <code>true</code> will be returned if the   *          argument is an empty string or is equal to this   *          <code>String</code> object as determined by the   *          {@link #equals(Object)} method.   * @exception java.lang.NullPointerException if <code>prefix</code> is   *          <code>null</code>.   * @since   JDK1. 0   */  public boolean startsWith(XMLString prefix)  {    return startsWith(prefix, 0);  }  /**   * Returns the index within this string of the first occurrence of the   * specified character. If a character with value <code>ch</code> occurs   * in the character sequence represented by this <code>String</code>   * object, then the index of the first such occurrence is returned --   * that is, the smallest value <i>k</i> such that:   * <blockquote><pre>   * this.charAt(<i>k</i>) == ch   * </pre></blockquote>   * is <code>true</code>. If no such character occurs in this string,   * then <code>-1</code> is returned.   *   * @param   ch   a character.   * @return  the index of the first occurrence of the character in the   *          character sequence represented by this object, or   *          <code>-1</code> if the character does not occur.   */  public int indexOf(int ch)  {    return indexOf(ch, 0);  }  /**   * Returns the index within this string of the first occurrence of the   * specified character, starting the search at the specified index.   * <p>   * If a character with value <code>ch</code> occurs in the character   * sequence represented by this <code>String</code> object at an index   * no smaller than <code>fromIndex</code>, then the index of the first   * such occurrence is returned--that is, the smallest value <i>k</i>   * such that:   * <blockquote><pre>   * (this.charAt(<i>k</i>) == ch) && (<i>k</i> >= fromIndex)   * </pre></blockquote>   * is true. If no such character occurs in this string at or after   * position <code>fromIndex</code>, then <code>-1</code> is returned.   * <p>   * There is no restriction on the value of <code>fromIndex</code>. If it   * is negative, it has the same effect as if it were zero: this entire   * string may be searched. If it is greater than the length of this   * string, it has the same effect as if it were equal to the length of   * this string: <code>-1</code> is returned.   *   * @param   ch          a character.   * @param   fromIndex   the index to start the search from.   * @return  the index of the first occurrence of the character in the   *          character sequence represented by this object that is greater   *          than or equal to <code>fromIndex</code>, or <code>-1</code>   *          if the character does not occur.   */  public int indexOf(int ch, int fromIndex)  {    int max = m_start + m_length;    FastStringBuffer fsb = fsb();    if (fromIndex < 0)    {      fromIndex = 0;    }    else if (fromIndex >= m_length)    {      // Note: fromIndex might be near -1>>>1.      return -1;    }    for (int i = m_start + fromIndex; i < max; i++)    {      if (fsb.charAt(i) == ch)      {        return i - m_start;      }    }    return -1;  }  /**   * Returns a new string that is a substring of this string. The   * substring begins with the character at the specified index and   * extends to the end of this string. <p>   * Examples:   * <blockquote><pre>   * "unhappy".substring(2) returns "happy"   * "Harbison".substring(3) returns "bison"   * "emptiness".substring(9) returns "" (an empty string)   * </pre></blockquote>   *   * @param      beginIndex   the beginning index, inclusive.   * @return     the specified substring.   * @exception  IndexOutOfBoundsException  if   *             <code>beginIndex</code> is negative or larger than the   *             length of this <code>String</code> object.   */  public XMLString substring(int beginIndex)  {    int len = m_length - beginIndex;    if (len <= 0)      return XString.EMPTYSTRING;    else    {      int start = m_start + beginIndex;      return new XStringForFSB(fsb(), start, len);    }  }  /**   * Returns a new string that is a substring of this string. The   * substring begins at the specified <code>beginIndex</code> and   * extends to the character at index <code>endIndex - 1</code>.   * Thus the length of the substring is <code>endIndex-beginIndex</code>.   *   * @param      beginIndex   the beginning index, inclusive.   * @param      endIndex     the ending index, exclusive.   * @return     the specified substring.   * @exception  IndexOutOfBoundsException  if the   *             <code>beginIndex</code> is negative, or   *             <code>endIndex</code> is larger than the length of   *             this <code>String</code> object, or   *             <code>beginIndex</code> is larger than   *             <code>endIndex</code>.   */  public XMLString substring(int beginIndex, int endIndex)  {    int len = endIndex - beginIndex;    if (len > m_length)      len = m_length;    if (len <= 0)      return XString.EMPTYSTRING;    else    {      int start = m_start + beginIndex;      return new XStringForFSB(fsb(), start, len);    }  }  /**   * Concatenates the specified string to the end of this string.   *   * @param   str   the <code>String</code> that is concatenated to the end   *                of this <code>String</code>.   * @return  a string that represents the concatenation of this object's   *          characters followed by the string argument's characters.   * @exception java.lang.NullPointerException if <code>str</code> is   *          <code>null</code>.   */  public XMLString concat(String str)  {    // %OPT% Make an FSB here?    return new XString(str().concat(str));  }  /**   * Removes white space from both ends of this string.   *   * @return  this string, with white space removed from the front and end.   */  public XMLString trim()  {    return fixWhiteSpace(true, true, false);  }  /**   * Returns whether the specified <var>ch</var> conforms to the XML 1.0 definition   * of whitespace.  Refer to <A href="http://www.w3.org/TR/1998/REC-xml-19980210#NT-S">   * the definition of <CODE>S</CODE></A> for details.   * @param   ch      Character to check as XML whitespace.   * @return          =true if <var>ch</var> is XML whitespace; otherwise =false.   */  private static boolean isSpace(char ch)  {    return XMLCharacterRecognizer.isWhiteSpace(ch);  // Take the easy way out for now.  }  /**   * Conditionally trim all leading and trailing whitespace in the specified String.   * All strings of white space are   * replaced by a single space character (#x20), except spaces after punctuation which   * receive double spaces if doublePunctuationSpaces is true.   * This function may be useful to a formatter, but to get first class   * results, the formatter should probably do it's own white space handling   * based on the semantics of the formatting object.   *   * @param   trimHead    Trim leading whitespace?   * @param   trimTail    Trim trailing whitespace?   * @param   doublePunctuationSpaces    Use double spaces for punctuation?   * @return              The trimmed string.   */  public XMLString fixWhiteSpace(boolean trimHead, boolean trimTail,                                 boolean doublePunctuationSpaces)  {    int end = m_length + m_start;    char[] buf = new char[m_length];    FastStringBuffer fsb = fsb();    boolean edit = false;    /* replace S to ' '. and ' '+ -> single ' '. */    int d = 0;    boolean pres = false;    for (int s = m_start; s < end; s++)    {      char c = fsb.charAt(s);      if (isSpace(c))      {        if (!pres)        {          if (' ' != c)          {            edit = true;          }          buf[d++] = ' ';          if (doublePunctuationSpaces && (d != 0))          {            char prevChar = buf[d - 1];            if (!((prevChar == '.') || (prevChar == '!')                  || (prevChar == '?')))            {              pres = true;            }          }          else          {            pres = true;          }        }        else        {          edit = true;          pres = true;        }      }      else      {        buf[d++] = c;        pres = false;      }    }    if (trimTail && 1 <= d && ' ' == buf[d - 1])    {      edit = true;      d--;    }    int start = 0;    if (trimHead && 0 < d && ' ' == buf[0])    {      edit = true;      start++;    }    XMLStringFactory xsf = XMLStringFactoryImpl.getFactory();    return edit ? xsf.newstr(buf, start, d - start) : this;  }  /**   * Convert a string to a double -- Allowed input is in fixed   * notation ddd.fff.   *   * %OPT% CHECK PERFORMANCE against generating a Java String and   * converting it to double. The advantage of running in native   * machine code -- perhaps even microcode, on some systems -- may   * more than make up for the cost of allocating and discarding the   * additional object. We need to benchmark this.    *   * %OPT% More importantly, we need to decide whether we _care_ about   * the performance of this operation. Does XString.toDouble constitute   * any measurable percentage of our typical runtime? I suspect not!   *   * @return A double value representation of the string, or return Double.NaN    * if the string can not be converted.  */  public double toDouble()  {    if(m_length == 0)      return Double.NaN;    int i;    char c;    String valueString = fsb().getString(m_start,m_length);        // The following are permitted in the Double.valueOf, but not by the XPath spec:    // - a plus sign    // - The use of e or E to indicate exponents    // - trailing f, F, d, or D    // See function comments; not sure if this is slower than actually doing the    // conversion ourselves (as was before).        for (i=0;i<m_length;i++)      if (!XMLCharacterRecognizer.isWhiteSpace(valueString.charAt(i)))        break;    if (i == m_length) return Double.NaN;    if (valueString.charAt(i) == '-')      i++;    for (;i<m_length;i++) {      c = valueString.charAt(i);      if (c != '.' && (c < '0' || c > '9'))        break;    }   	    	    for (;i<m_length;i++)      if (!XMLCharacterRecognizer.isWhiteSpace(valueString.charAt(i)))        break;    if (i != m_length)      return Double.NaN;    	    try {      return new Double(valueString).doubleValue();    } catch (NumberFormatException nfe) {      // This should catch double periods, empty strings.      return Double.NaN;    }  }}

⌨️ 快捷键说明

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