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

📄 xstring.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * Copyright 1999-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: XString.java,v 1.2.4.1 2005/09/14 20:47:20 jeffsuttor Exp $ */package com.sun.org.apache.xpath.internal.objects;import java.util.Locale;import com.sun.org.apache.xml.internal.dtm.DTM;import com.sun.org.apache.xml.internal.utils.XMLCharacterRecognizer;import com.sun.org.apache.xml.internal.utils.XMLString;import com.sun.org.apache.xml.internal.utils.XMLStringFactory;import com.sun.org.apache.xpath.internal.ExpressionOwner;import com.sun.org.apache.xpath.internal.XPathContext;import com.sun.org.apache.xpath.internal.XPathVisitor;/** * This class represents an XPath string object, and is capable of * converting the string to other types, such as a number. * @xsl.usage general */public class XString extends XObject implements XMLString{    static final long serialVersionUID = 2020470518395094525L;  /** Empty string XString object */  public static final XString EMPTYSTRING = new XString("");  /**   * Construct a XString object.  This constructor exists for derived classes.   *   * @param val String object this will wrap.   */  protected XString(Object val)  {    super(val);  }  /**   * Construct a XNodeSet object.   *   * @param val String object this will wrap.   */  public XString(String val)  {    super(val);  }  /**   * Tell that this is a CLASS_STRING.   *   * @return type CLASS_STRING   */  public int getType()  {    return CLASS_STRING;  }  /**   * Given a request type, return the equivalent string.   * For diagnostic purposes.   *   * @return type string "#STRING"   */  public String getTypeString()  {    return "#STRING";  }  /**   * Tell if this object contains a java String object.   *   * @return true if this XMLString can return a string without creating one.   */  public boolean hasString()  {    return true;  }  /**   * Cast result object to a number.   *   * @return 0.0 if this string is null, numeric value of this string   * or NaN   */  public double num()  {    return toDouble();  }  /**   * Convert a string to a double -- Allowed input is in fixed   * notation ddd.fff.   *   * @return A double value representation of the string, or return Double.NaN   * if the string can not be converted.   */  public double toDouble()  {    /* XMLCharacterRecognizer.isWhiteSpace(char c) methods treats the following      * characters as white space characters.     * ht - horizontal tab, nl - newline , cr - carriage return and sp - space     * trim() methods by default also takes care of these white space characters     * So trim() method is used to remove leading and trailing white spaces.     */	XMLString s = trim();	double result = Double.NaN;	for (int i = 0; i < s.length(); i++)	{		char c = s.charAt(i);    if (c != '-' && c != '.' && ( c < 0X30 || c > 0x39)) {            // The character is not a '-' or a '.' or a digit            // then return NaN because something is wrong.			return result;        }	}	try	{		result = Double.parseDouble(s.toString());	} catch (NumberFormatException e){}	return result;}  /**   * Cast result object to a boolean.   *   * @return True if the length of this string object is greater   * than 0.   */  public boolean bool()  {    return str().length() > 0;  }  /**   * Cast result object to a string.   *   * @return The string this wraps or the empty string if null   */  public XMLString xstr()  {    return this;  }  /**   * Cast result object to a string.   *   * @return The string this wraps or the empty string if null   */  public String str()  {    return (null != m_obj) ? ((String) m_obj) : "";  }  /**   * Cast result object to a result tree fragment.   *   * @param support Xpath context to use for the conversion   *   * @return A document fragment with this string as a child node   */  public int rtf(XPathContext support)  {    DTM frag = support.createDocumentFragment();    frag.appendTextChild(str());    return frag.getDocument();  }  /**   * Directly call the   * characters method on the passed ContentHandler for the   * string-value. Multiple calls to the   * ContentHandler's characters methods may well occur for a single call to   * this method.   *   * @param ch A non-null reference to a ContentHandler.   *   * @throws org.xml.sax.SAXException   */  public void dispatchCharactersEvents(org.xml.sax.ContentHandler ch)          throws org.xml.sax.SAXException  {    String str = str();    ch.characters(str.toCharArray(), 0, str.length());  }  /**   * Directly call the   * comment method on the passed LexicalHandler for the   * string-value.   *   * @param lh A non-null reference to a LexicalHandler.   *   * @throws org.xml.sax.SAXException   */  public void dispatchAsComment(org.xml.sax.ext.LexicalHandler lh)          throws org.xml.sax.SAXException  {    String str = str();    lh.comment(str.toCharArray(), 0, str.length());  }  /**   * Returns the length of this string.   *   * @return  the length of the sequence of characters represented by this   *          object.   */  public int length()  {    return str().length();  }  /**   * Returns the character at the specified index. An index ranges   * from <code>0</code> to <code>length() - 1</code>. The first character   * of the sequence is at index <code>0</code>, the next at index   * <code>1</code>, and so on, as for array indexing.   *   * @param      index   the index of the character.   * @return     the character at the specified index of this string.   *             The first character is at index <code>0</code>.   * @exception  IndexOutOfBoundsException  if the <code>index</code>   *             argument is negative or not less than the length of this   *             string.   */  public char charAt(int index)  {    return str().charAt(index);  }  /**   * Copies characters from this string into the destination character   * array.   *   * @param      srcBegin   index of the first character in the string   *                        to copy.   * @param      srcEnd     index after the last character in the string   *                        to copy.   * @param      dst        the destination array.   * @param      dstBegin   the start offset in the destination array.   * @exception IndexOutOfBoundsException If any of the following   *            is true:   *            <ul><li><code>srcBegin</code> is negative.   *            <li><code>srcBegin</code> is greater than <code>srcEnd</code>   *            <li><code>srcEnd</code> is greater than the length of this   *                string   *            <li><code>dstBegin</code> is negative   *            <li><code>dstBegin+(srcEnd-srcBegin)</code> is larger than   *                <code>dst.length</code></ul>   * @exception NullPointerException if <code>dst</code> is <code>null</code>   */  public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)  {    str().getChars(srcBegin, srcEnd, dst, dstBegin);  }  /**   * Tell if two objects are functionally equal.   *   * @param obj2 Object to compare this to   *   * @return true if the two objects are equal   *   * @throws javax.xml.transform.TransformerException   */  public boolean equals(XObject obj2)  {    // In order to handle the 'all' semantics of     // nodeset comparisons, we always call the     // nodeset function.    int t = obj2.getType();    try    {	    if (XObject.CLASS_NODESET == t)	      return obj2.equals(this);	    // If at least one object to be compared is a boolean, then each object 	    // to be compared is converted to a boolean as if by applying the 	    // boolean function. 	    else if(XObject.CLASS_BOOLEAN == t)	    	return obj2.bool() == bool();	    // Otherwise, if at least one object to be compared is a number, then each object 	    // to be compared is converted to a number as if by applying the number function. 	    else if(XObject.CLASS_NUMBER == t)	    	return obj2.num() == num();    }    catch(javax.xml.transform.TransformerException te)    {    	throw new com.sun.org.apache.xml.internal.utils.WrappedRuntimeException(te);    }    // Otherwise, both objects to be compared are converted to strings as     // if by applying the string function.     return xstr().equals(obj2.xstr());  }  /**   * Compares this string to the specified object.   * The result is <code>true</code> if and only if the argument is not   * <code>null</code> and is a <code>String</code> object that represents   * the same sequence of characters as this object.   *   * @param obj2   the object to compare this <code>String</code>   *                     against.   * @return  <code>true</code> if the <code>String </code>are equal;   *          <code>false</code> otherwise.   * @see     java.lang.String#compareTo(java.lang.String)   * @see     java.lang.String#equalsIgnoreCase(java.lang.String)   */  public boolean equals(XMLString obj2)  {    if (!obj2.hasString())      return obj2.equals(this);    else      return str().equals(obj2.toString());  }  /**   * Compares this string to the specified object.   * The result is <code>true</code> if and only if the argument is not   * <code>null</code> and is a <code>String</code> object that represents   * the same sequence of characters as this object.   *   * @param   obj2       the object to compare this <code>String</code>   *                     against.   * @return  <code>true</code> if the <code>String </code>are equal;   *          <code>false</code> otherwise.   * @see     java.lang.String#compareTo(java.lang.String)   * @see     java.lang.String#equalsIgnoreCase(java.lang.String)   */  public boolean equals(Object obj2)  {    if (null == obj2)      return false;      // In order to handle the 'all' semantics of       // nodeset comparisons, we always call the       // nodeset function.    else if (obj2 instanceof XNodeSet)      return obj2.equals(this);    else if(obj2 instanceof XNumber)    	return obj2.equals(this);    else

⌨️ 快捷键说明

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