String类是不变字符串,StringBuilder和StringBuffer是可变字符串,这三种字符串都是16位的Unicode字符序列,并且这三个类都被声明为final,因此不能被继承。这三个类各有不同的特点,应用于不同场合。
在Java程序中,有一种特殊的创建String对象的方法,直接利用字符串字面值创建字符串对象。例如:String s ="java is good";
一般使用String类的构造方法创建一个字符串对象。String类有十多个重载的构造方法,可以生成一个空字符串,也可以由字符或字节数组生成字符串。常用的构造方法如下:
public String():创建一个空字符串。
public String(char[] value):使用字符数组中的字符创建字符串。
public String(char[] value, int offset, int count):使用字符数组中offset为起始下标,count个字符创建一个字符串。
public String(byte[] bytes, String charsetName):使用指定的字节数组构造一个新的字符串,新字符串的长度与字符集有关,因此可能与字节数组的长度不同。charsetName为使用的字符集名,如US-ASCII、ISO-8859-1、UTF-8、UTF-16等。如果使用了系统不支持的字符集,将抛出UnsupportedEncodingException异常。
public String(String original):使用一个字符串对象创建字符串。
public String(StringBuffer buffer):使用StringBuffer对象创建字符串。
public String(StringBuilder buffer):使用StringBuilder对象创建字符串
public int length():返回字符串的长度,即字符串包含的字符个数。注意,对含有中文或其他语言符号的字符串,计算长度时,一个符号作为一个字符计数。
public String substring(int beginIndex, int endIndex):从字符串的下标beginIndex开始到endIndex结束产生一个子字符串。
public String substring(int beginIndex):从字符串的下标beginIndex开始到结束产生一个子字符串。
public String toUpperCase():将字符串转换成大写字母。
public String toLowerCase():将字符串转换成小写字母。
public String trim():返回删除了前后空白字符的字符串对象。
public boolean isEmpty():返回该字符串是否为空(""),如果length()的结果为0,方法返回true,否则返回false。
public String concat(String str):将调用字符串与参数字符串连接起来,产生一个新的字符串。
public String replace(char oldChar, char newChar):将字符串中的所有oldChar字符改变为newChar字符,返回一个新的字符串。
public char charAt(int index):返回字符串中指定位置的字符,index表示位置为0~s.length()?1。
public static String valueOf(double d):将参数的基本类型double值转换为字符串。String类中还定义了其他多个重载的valueOf()方法。
String类提供了从字符串中查找字符和子串的方法,如下所示。
public int indexOf(int ch):查找字符ch第一次出现的位置。如果查找不成功则返回?1,下述方法相同。
public int indexOf(int ch, int fromIndex ):查找字符ch从fromIndex开始第一次出现的位置(在原字符串中的下标)。
public int indexOf(String str):查找字符串str第一次出现的位置。
public int indexOf(String str, int fromIndex ):查找字符串str从fromIndex开始第一次出现的位置(在原字符串中的下标)。
public int lastIndexOf(int ch):查找字符ch最后一次出现的位置。
public int lastIndexOf(int ch, int endIndex):查找字符ch到endIndex为止最后一次出现的位置。
public int lastIndexOf(String str):查找字符串str最后一次出现的位置。
public int lastIndexOf(String str, int endIndex):查找字符串str到endIndex为止最后一次出现的位置(在原字符串中的下标)。
字符串不是数组,但是字符串能够转换成字符数组或字节数组。String类提供了下列方法将字符串转换成数组。
public char[] toCharArray():将字符串中的字符转换为字符数组。
public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将字符串中从起始位置(srcBegin)到结束位置(srcEnd)之间的字符复制到字符数组dst中,dstBegin为目标数组的起始位置。
public byte[] getBytes():使用平台默认的字符集将字符串编码成字节序列,并将结果存储到字节数组中。
public byte[] getBytes(String charsetName):使用指定的字符集将字符串编码成字节序列,并将结果存储到字节数组中。该方法抛出java.io.UnsupportedEncodingException异常。
如果要比较两个字符串对象的内容是否相等,可以使用String类的equals()方法或equalsIgnoreCase()方法。
public boolean equals(String anotherString):比较两个字符串内容是否相等。
public boolean equalsIgnoreCase(String anotherString):比较两个字符串内容是否相等,不区分大小写。
实际上equals()是从Object类中继承来的,原来在Object类中,该方法比较的是对象的引用,而在String类中覆盖了该方法,比较的是字符串的内容。
特别注意,不能使用“==”号来比较字符串内容是否相等,
使用equals()方法只能比较字符串相等与否,要比较大小,可以使用String类的compareTo()方法,格式为:
该方法将当前字符串与参数字符串比较,并返回一个整数值。使用字符的Unicode码值进行比较。若当前字符串小于参数字符串,方法返回值小于0;若当前字符串大于参数字符串,方法返回值大于0;若当前字符串等于参数字符串,方法返回值等于0。
String类还提供了下面方法判断一个字符串是否以某个字符串开头或结尾或为另一个字符串的子串。
public boolean startsWith(String prefix):返回字符串是否以某个字符串开始。
public boolean endsWith(String suffix):返回字符串是否以某个字符串结尾。
public boolean contains(String str):如果参数字符串str是当前字符串的子串,则返回true。
另外,String类还提供了regionMatches()方法比较两个字符串指定区域的字符串是否相等。
使用String类的split()方法可以将一个字符串分解成子字符串或令牌(token),使用join()方法可以将String数组中字符串连接起来,使用matches()方法返回字符串是否与正则表达式匹配。
public String[] split(String regex):参数regex表示正则表达式,根据给定的正则表达式将字符串拆分成字符串数组。
public boolean matches(String regex):返回字符串是否与给定的正则表达式匹配。
public static String join(CharSequence delimiter, CharSequence…elements):使用指定的分隔符将elements的各元素组合成一个新字符串。
可以使用System.out.printf()方法在控制台上显示格式化输出,格式如下:
提示:%用来作为标记格式,如果要在格式字符串里输出直接量%,需要使用%%。
在String类中还提供了两个重载的format()方法,它们的格式如下:public static String format(String format, Object…args)public static String format(Locale l, String format, Object…args)这两个方法的功能是按照参数指定的格式,将args格式化成字符串返回。此外,在java.io.PrintStream类、java.io.PrintWriter类以及java.util.Formatter类中都提供了相应的format()方法。它们的不同之处是方法的返回值不同。在各自类中的format()方法返回各自类的一个对象,如Formatter类的format()方法返回一个Formatter对象。有关这些方法的使用,请参阅Java API文档。
public StringBuilder():创建一个没有字符的字符串缓冲区,初始容量为16个字符。此时length()方法的值为0,而capacity()方法的值为16。
public StringBuilder(int capacity):创建一个没有字符的字符串缓冲区,capacity为指定的初始容量。
public StringBuilder(String str):利用一个已存在的字符串对象str创建一个字符串缓冲区对象,另外再分配16个字符的缓冲区。
StringBuilder类除定义了length()、charAt()、indexOf()、getChars()等方法外,还提供了下列常用方法:
public int capacity():返回当前的字符串缓冲区的总容量。
public void setCharAt(int index, char ch):用ch修改指定位置的字符。public StringBuilder append(String str):在当前的字符串的末尾添加一个字符串。该方法有一系列的重载方法,参数可以是boolean、char、int、long、float、double、char[]等任何数据类型。
public StringBuilder insert(int offset, String str):在当前字符串的指定位置插入一个字符串。这个方法也有多个重载的方法,参数可以是boolean、char、int、long、float、double、char[]等类型。
public StringBuilder deleteCharAt(int index):删除指定位置的字符,后面字符向前移动。
public StringBuilder delete(int start, int end):删除从start开始到end(不包括end)的字符。
public StringBuilder replace(int start, int end, String str):用字符串str替换从start开始到end(不包括end)的字符。
public StringBuilder reverse():将字符串的所有字符反转。
public String substring(int start):返回从start开始到字符串末尾的子字符串。
public String substring(int start, int end):返回从start开始到end(不包括end)的子字符串。public void setLength(int newLength):设置字符序列的长度。如果newLength小于原字符串的长度,字符串将被截短;如果newLength大于原字符串的长度,字符串将使用空字符('\u0000')扩充。