【Java】String类的方法介绍

来源:互联网 发布:随着大数据时代的来临 编辑:程序博客网 时间:2024/06/05 04:48

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。

二、方法

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
注: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)     
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开始找第一个匹配字符串位置。
16. int lastIndexOf(int ch)      // 同上 ,寻找最后一匹配字符
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)   
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()    //  将字符串转换成大写

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[ ])

三、一些易错点:

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;



0 0
原创粉丝点击