package java.lang;
import java.io.UnsupportedEncodingException;
import java.io.Serializable;
import java.lang.Comparable;
import java.util.Comparator;
import java.util.Locale;
public final class String implements Serializable, Comparable, CharSequence
{
private Object data;
private int boffset; private int count;
private static final long serialVersionUID = -6849794470754667710L;
private static final class CaseInsensitiveComparator
implements Comparator, Serializable
{
CaseInsensitiveComparator() {}
public int compare(Object o1, Object o2)
{
return ((String) o1).compareToIgnoreCase((String) o2);
}
}
public static final Comparator CASE_INSENSITIVE_ORDER
= new CaseInsensitiveComparator();
public String ()
{
init();
}
public String (String value)
{
data = value.data;
boffset = value.boffset;
count = value.count;
}
public String (StringBuffer buffer)
{
synchronized (buffer)
{
buffer.shared = true;
init (buffer.value, 0, buffer.count, true);
}
}
String (gnu.gcj.runtime.StringBuffer buffer)
{
init (buffer.value, 0, buffer.count, true);
}
public String (char[] data)
{
init(data, 0, data.length, false);
}
public String (char[] data, int offset, int count)
{
init(data, offset, count, false);
}
String (char[] data, int offset, int count, boolean dont_copy)
{
init(data, offset, count, dont_copy);
}
public String (byte[] byteArray)
{
this (byteArray, 0, byteArray.length);
}
public String (byte[] byteArray, int offset, int count)
{
try
{
init (byteArray, offset, count,
System.getProperty("file.encoding", "8859_1"));
}
catch (UnsupportedEncodingException x1)
{
try
{
init (byteArray, offset, count, "8859_1");
}
catch (UnsupportedEncodingException x2)
{
}
}
}
public String (byte[] byteArray, String enc)
throws UnsupportedEncodingException
{
this (byteArray, 0, byteArray.length, enc);
}
public String (byte[] byteArray, int offset, int count, String enc)
throws UnsupportedEncodingException
{
init (byteArray, offset, count, enc);
}
public static String copyValueOf(char[] data)
{
return copyValueOf (data, 0, data.length);
}
public static String copyValueOf(char[] data, int offset, int count)
{
String r = new String ();
r.init(data, offset, count, false);
return r;
}
public String (byte[] ascii, int hibyte)
{
init(ascii, hibyte, 0, ascii.length);
}
public String (byte[] ascii, int hibyte, int offset, int count)
{
init(ascii, hibyte, offset, count);
}
public String toString ()
{
return this;
}
public native boolean equals (Object anObject);
public native int hashCode ();
public int length ()
{
return count;
}
public native char charAt (int index);
public native void getChars (int srcBegin, int srcEnd,
char[] dst, int dstBegin);
public byte[] getBytes ()
{
try
{
return getBytes (System.getProperty("file.encoding", "8859_1"));
}
catch (UnsupportedEncodingException x)
{
try
{
return getBytes ("8859_1");
}
catch (UnsupportedEncodingException x2)
{
throw new InternalError ("couldn't find 8859_1 encoder");
}
}
}
public native byte[] getBytes (String enc)
throws UnsupportedEncodingException;
public native void getBytes (int srcBegin, int srcEnd,
byte[] dst, int dstBegin);
public native char[] toCharArray ();
public native boolean equalsIgnoreCase (String anotherString);
public native int compareTo (String anotherString);
public int compareTo (Object obj)
{
return compareTo ((String)obj);
}
public int compareToIgnoreCase (String str)
{
return this.toUpperCase().toLowerCase().compareTo(
str.toUpperCase().toLowerCase());
}
public native boolean regionMatches (int toffset,
String other, int ooffset, int len);
public native boolean regionMatches (boolean ignoreCase, int toffset,
String other, int ooffset, int len);
public boolean startsWith (String prefix)
{
return startsWith (prefix, 0);
}
public native boolean startsWith (String prefix, int toffset);
public boolean endsWith (String suffix)
{
return regionMatches (this.count - suffix.count, suffix, 0, suffix.count);
}
public int indexOf (int ch)
{
return indexOf (ch, 0);
}
public native int indexOf (int ch, int fromIndex);
public int indexOf (String str)
{
return indexOf (str, 0);
}
public native int indexOf (String str, int fromIndex);
public int lastIndexOf (int ch)
{
return lastIndexOf (ch, count - 1);
}
public native int lastIndexOf (int ch, int fromIndex);
public int lastIndexOf (String str)
{
return lastIndexOf (str, count - str.count);
}
public int lastIndexOf (String str, int fromIndex)
{
if (fromIndex >= count)
fromIndex = count - str.count;
for (;; --fromIndex)
{
if (fromIndex < 0)
return -1;
if (startsWith(str, fromIndex))
return fromIndex;
}
}
public CharSequence subSequence(int beginIndex, int endIndex)
throws IndexOutOfBoundsException
{
return substring(beginIndex, endIndex);
}
public String substring (int beginIndex)
{
return substring (beginIndex, count);
}
public native String substring (int beginIndex, int endIndex);
public native String concat (String str);
public native String replace (char oldChar, char newChar);
public native String toLowerCase (Locale locale);
public native String toUpperCase (Locale locale);
public String toLowerCase ()
{
return toLowerCase (null);
}
public String toUpperCase ()
{
return toUpperCase (null);
}
public native String trim ();
public static String valueOf (Object obj)
{
return obj == null ? "null" : obj.toString();
}
public static String valueOf (char[] data)
{
return valueOf (data, 0, data.length);
}
public static native String valueOf (char[] data, int offset, int count);
public static String valueOf (boolean b)
{
return b ? "true" : "false";
}
public static native String valueOf (char c);
public static native String valueOf (int i);
public static String valueOf (long l)
{
return Long.toString(l);
}
public static String valueOf (float f)
{
return Float.toString(f);
}
public static String valueOf (double d)
{
return Double.toString(d);
}
public native String intern ();
private native void init ();
private native void init (char[] chars, int offset, int count,
boolean dont_copy);
private native void init (byte[] chars, int hibyte, int offset, int count);
private native void init (byte[] chars, int offset, int count, String enc)
throws UnsupportedEncodingException;
private static native void rehash ();
}