Java将字符串作为String类型对象来处理,创建后内容不可变,被说明为String引用的变量可以被改变以指向另外的一些字符串(String)对象。
一、构造字符串
String s = new String(); // 将创建一个String实例,该实例中不包含字符。
char chars[] = { 'a', 'b', 'c', 'd', 'e', 'f' };
String s = new String(chars); // 这个构造函数用字符串 “abcdef” 初始化s。
String s = new String(chars, 2, 3); // 该例子用字符cde初始化s,从数组下标为2的元素开始,选取3个字符初始化为字符串s。
String s = new String(chars, 2, 3); // 该例子用字符cde初始化s,从数组下标为2的元素开始,选取3个字符初始化为字符串s。
二、方法
1. int length() // 返回字符串长度
2. char charAt(int where) // where 为字符下标
3. void getChars(int sourceStart, int sourceEnd, char target[ ], int targetStart) // 字符下标从sourceStart 到 sourceEnd-1 ,获得字符的数组由target所指定。
4. char[ ] toCharArray( ) // 将字符串(String)对象中的字符转换为一个字符数组
5.boolean equals(Object str) / / 比较两个字符串是否相等
6.boolean equalsIgnoreCase(String str) // 忽略大小写
<span style="white-space:pre"> </span>String s1 = "Hello";
<span style="white-space:pre"> </span>String s2 = "Hello";
String s3 = "Good-bye";
System.out.println(s1 + " equals " + s2 + " -> " + s1.equals(s2));
System.out.println(s1 + " equals " + s3 + " -> " + s1.equals(s3));</span>
该程序的输出如下所示:
Hello equals Hello -> true
Hello equals Good-bye -> false
Hello equals Good-bye -> false
注:equals( )方法和==运算符执行的是两个不同的操作,equals( )方法比较字符串(String)对象中的字符,而==运算符比较两个对象引用看它们是否引用相同的实例。
7. boolean startsWith(String str) // "Foobar".endsWith("bar") 返回True
8.boolean startsWith(String str, int startIndex) // 指定搜索下标 "Foobar".startsWith("bar", 3) 返回true。
9. boolean endsWith(String str)
9. boolean endsWith(String str)
10.int compareTo(String str) // 一个字符串小于另一个指的是它在字典中先出现 "Now".compareTo("Me") 返回 <0
11.int compareToIgnoreCase(String str) // 不考虑大小写
12.int indexOf(int ch) // 搜索第一个匹配字符用 , 方法返回字符或子字符串被发现的位置的下标,当搜索失败时,返回-1
13. int indexOf(int ch, int fromIndex) // 从fromIndex开始找第一个匹配字符位置。
14. int indexOf(String str) // 只找第一个匹配字符串位置。
15. int indexOf(String str, int fromIndex) // 从fromIndex开始找第一个匹配字符串位置。
15. int indexOf(String str, int fromIndex) // 从fromIndex开始找第一个匹配字符串位置。
16. int lastIndexOf(int ch) // 同上 ,寻找最后一匹配字符
17. int lastIndexOf(int ch, int fromIndex)
18. int lastIndexOf(String str)
19. int lastIndexOf(String str, int fromIndex)
17. int lastIndexOf(int ch, int fromIndex)
18. int lastIndexOf(String str)
19. int lastIndexOf(String str, int fromIndex)
public class CompareToDemo {
public static void main (String[] args) {
String s1 = new String("acbdebfg");
System.out.println(s1.lastIndexOf((int)'b',7));
}
}
运行结果: 5 ( 从最后一个字符g 往前数)
20. int hashCode() // 返回当前字符的哈希表码。
21.String substring(int startIndex) // 截取子字符串
22.String substring(int startIndex, int endIndex)
22.String substring(int startIndex, int endIndex)
23.String concat(String str) // 连接俩字符串 , String s2 = “one”.concat("two"); s2: onetwo 效果同 String s2 = “one” + "two" ;
24.String replace(char original, char replacement) //替换
25. String trim( ) // 将位于调用字符串前面和后面的空白符删除后的剩余部分
26. String toLowerCase() // 将字符串转换成小写
27. String toUpperCase() // 将字符串转换成大写
27. String toUpperCase() // 将字符串转换成大写
28. String[] split(String regex) // 将一个字符串按照指定的分隔符分隔,返回分隔后的字符串数组
29.byte[ ] getBytes( ) // 将该String对象转换成byte数组
30.static String valueOf(double num) // 将数据的内部格式转换为可读的形式 ,不是很明白...
31.static String valueOf(long num)
32.static String valueOf(Object ob)
33.static String valueOf(char chars[ ])
31.static String valueOf(long num)
32.static String valueOf(Object ob)
33.static String valueOf(char chars[ ])
三、一些易错点:
1. 对于所有参数中含有startIndex 指的是数组下标, endIndex 指到endIndex-1 为止,不包含endIndex。
"hamburger".substring(4, 8) // returns "urge"
"unhappy".substring(2) // returns "happy"
"emptiness".substring(9) // 出错,超过字符下标</span>
2. String 类的创建
例1. (详情见 http://jingyan.todgo.com/yuer/877362czm.html )
虽然str1 ,str2和 str3 的内容一样,但是内存地址是不同的。
str1 用new 生成对象,JVM会在堆中为String分配空间,
str2 在String常量池创建“百度”对象,
str3指向str2 所以和str2是一样的。
如果str3写成 str3 = "百度" ,str2 == str3 仍然返回True . 因为str2 在常量池中,JVM会为了节省开销,把str3的引用也指向了“百度”对象。
如果str3写成 String str3 = new String , str2 == str3 返回False . 因为str2 和str3 都是通过new 在堆中创建的,是不一样的。
可以直接看到的对象一般在常量池中,如str1 = "abc" str2= "ad" +"bc"
而 new 生成的,以及不能立刻判断内容的,都在堆中,指向的是不同的对象! 如 a = "ad" b= "bc" c= a+b
c == str2 返回false (虽然内容相同,对象不同)
无论在常量池还是堆中的对象,用equals()方法比较的就是内容
3、未初始化、空串""与null
String s1=null ;
String s2 = "";
String s3 = "abc";
s1,s2 ,s3 均是string类的一个引用 ,null 表示不指向任何字符串对象, "" 表示指向长度为0 的字符串对象。
好比是否能说话, s1 没办法说话, s2 可以说话,没说任何话, s3 说了"abc",长度为3;