java_String类

来源:互联网 发布:主人网络个访问网络 编辑:程序博客网 时间:2024/05/01 14:26

 

String

   字符串是一个特殊的对象。

   字符串一旦被初始化,就不可以被改变。

    String类不可以有子类,因为已经被final修辞。

    Strings1 = “abc”;              //s1在内存中是一个对象。

    Strings2 = new String(“abc”);   //s2在内存中有两个对象。

    System.out.println(s1== s2);  结果为false,因为==是判断两个对象是否相同。

    System.out.println(s1.equals(s2)); 结果为true,equals是判断两个字符串内容是否相同。equals是比较的两个地址值。

 

    String类中的常用方法:

一,获取

       1、length();获取某字符串的长度。注意:获取数组的长度是.length,没有括号。

       2、charAt(int index);  获取字符串中某脚标的字符。

       3、indexOf(intch);  获取ch在字符串中第一次出现的位置。

       4、indexOf(int ch,int fromIndex); 获取ch在字符串中从fromIndex开始往后第一次出现的位置。

       5、indexOf(String char);  获取字符串char在字符串中第一次出现的位置。

       6、indexOf(String char,int fromIndex);   获取字符串char在字符串中从fromIndex开始往后第一次出现的位置。

例如:

String str = "fdalkgdkakl";

      System.out.println(str.charAt(4));//打印出str中脚标为4的字符。值为k。如果脚标参数大于了字符串长度,会出现脚标越界异常:StringIndexOutOfBoundsException

      System.out.println(str.indexOf(‘a’)); //打印出a在字符串中出现的第一个脚标。值为1

System.out.println(str.indexOf("al"));//打印出字符串al在字符串中出现的位置,值为2,如果al不在字符串中,值为-1

 

二,判断

1、contains(str):字符串中否包含某一个子串。

2、isEmpty():字符中是否有内容。实际是判断字符串的长度是否为0。

3、startsWith(str):字符串是否是以指定内容开头。

4、endsWith(str):字符串是否是以指定内容结尾。

5、equals(str):判断字符串的内容是否相同,复写了Object类中的equals方法。

6、equalsIgnoreCawse():判断字符串的内容是否相同,不区分大小写。

例如:

String str = "fdalkgdkakl.java";

      System.out.println(str.contains("alk"));//值为true

      System.out.println(str.isEmpty());//值为false

      System.out.println(str.startsWith("kkk"));//值为false

      System.out.println(str.endsWith(".java"));//值为true

      System.out.println(str.equalsIgnoreCase("FDAlkgdkakl.java"));//值为true

 

三、转换

1、将字符数组转换成字符串。

   构造函数:

       1、String(char[])

       2、String(char[],offset,count):将字符数组中的一部分转换成字符串,offset代表脚标,count代表位数,就是将offset脚标开始,数offset位的字符转换成字符串。

   静态方法:

       1、static String copyValueOf(char[])

       2、static String copyValueOf(char[] data,int offset, int count):同构造参数一样。

       3、static String valueOf(char[])

2、将字符串转换成字符数组。

    toCharArray()

3、将字节数组转换成字符串。

    String(byte[])

    String(byte[],offset,count)参数同上面构造函数一样。

4、将字符串转换成字节数组。

    getBytes():

5、将基本数据类型转换成字符串。

    1、static String valuOf(int)

    2、static String valuOf(double)

    ……

特殊:字符串和字节数组在转换过程中,是可以指定编码表的。

例如:

char[] ch = {'l','o','v','e','j','a','v','a'};

      String str1 =new String(ch); 

      String str2 =new String(ch,1,4);

     

      System.out.println(str1); //str1的值为lovejava

      System.out.println(str2); //str2的值为ovej

     

      String str3 ="lovejava";

      char[] c = str3.toCharArray();

      for(int x = 0; x<c.length; x++){

         System.out.println(c[x]); //打印出c数组的各元素值:l  o v  e  j a  v  a

      }

 

四、替换

Stringreplace(oldchar,newchar): oldchar是被替换的字符子串,newchar是替换旧子串的新串。

例如:

      String str1 ="love java"//str1为原串。

      String str2 = str1.replace("l","L"); //将原串中的l字符替换成大写的L字符。

      String str3 = str1.replace("k","L"); //这时,被替换的k字符在原串中不存在,str3仍为原串。   

      String str4 = str1.replace("java","C++"); //用字符串"C++"替换原串中的"java"子串。

      注意:替换是生成新的字符串,而不是将原串改变。原字符串是永远不会改变的。

      System.out.println(str2);//str2值为Love java

      System.out.println(str3);//str3值为love java

      System.out.println(str4);//str4值为love C++

 

五、切割

    String[]split(regex):regex是分割符,将字符串切割成若干块,存在字符数组当中。

   例如:

String str1 = "lovejava"//str1为原串。

      String[] str5 = str1.split(" ");//将原串以空格为分割符切成两个字符串存在字符串数组中。

 

六、子串。获取字符串中的一部分。

    Stringsubstring(begin);获取字符串中的一部分,从begin开始,begin是起始脚标,到结尾。

Stringsubstring(begin,end);同样,从begin脚标开始,到end-1坐标结束,包含头不包含尾。

例如:

      String str = "love java";

      String str1 =str.substring(5);

      String str2 =str.substring(1,6);//取脚标1到5的子串。

      System.out.println(str1);  //str1的值为java

      System.out.println(str2); //str2的值为ove j

 

七、转换、去除空格、比较

    1、大小写相互转换。

       toUpperCase();把字符串全部变成大写。

       toLowerCase();把字符串全部变成小写。

2、去除字符串两边的空格。

trim();将字符串两端的空格去掉。

3、比较。

    compareTo();将两个字符串进行自然顺序的比较。返回值负数、0、正数。如果原字符串比参数字符串大,返回正数,相等,返回0,否则返回负数。不必在乎返回值的大小,只管是正还是负就行。

例如:

String str = "  love java  ";

     

      String str1 = str.toUpperCase(); //str全部变成大写。

      String str2 = str.toLowerCase(); //str全部变成小写。

      String str3 = str.trim(); //str两边的空格去掉。

     

      String str4 =" verybeautiful";

      int x = str4.compareTo(str3); //str4str3进行比较。

     

      System.out.println(str1); //str1值为:  LOVE JAVA

      System.out.println(str2); //str2值为:  love java

      System.out.println(str3); //str3值为:love java

   System.out.println(x); //x的值为-76,说明str4str3小。

 

练习01

   /*

 *手动制作一个去除字符串两边空格的功能。不能用trim()

 * */

package String_Test;

 

publicclass String_Test_02 {

   publicstaticvoid main(String[] args) {

      String s ="   hello hema       "//任意定义两边有空格的字符串。

      System.out.println("("+s+")");//打印原串。

      String s1 =myTrim(s); //调用手动制作的去除两边空格的方法。 

      System.out.println("("+s1+")"); //打印新串。

   }

   //人工去除两边空格的方法。

   publicstatic String myTrim(String str){

      //分别定义字符串左右两边的脚标变量。

      int left = 0;

      int right =str.length()-1;    

      while(left<=right && str.charAt(left)==' ')//让左边脚标往右移,直到遇到不是空格的字符。

         left++;

      while(left<=right && str.charAt(right)==' ')//同理,右边往左边移。

         right--;         

      return str.substring(left, right+1); //用获取子串的方法,取不为空格的字符串段。并返回。

   }

}

 

练习02

/*

 *将一个字符串进行反转。

 *思路:

 * 1、将字符串变成字符数组。

 * 2、将字符数组反转。

 * 3、将反转后的数组变成字符串。

 * */

package String_Test;

 

publicclass String_Test_03 {

   publicstaticvoid main(String[] args){

      String s ="  hema good "//定义原字符串,要将它反转过来。

      System.out.println(fan_String(s)); //打印反转后的字符串。

   }

   //定义一个反转字符串的方法

   publicstatic String fan_String(String str){

      char[] ch = str.toCharArray(); //将字符串转成字符数组。

      fan_char(ch); //调用字符数组反转函数。

      returnnew String(ch); //再将字符数组转成字符串。

   }

   //定义一个反转字符数组的方法

   publicstaticvoid fan_char(char[] cha){

      for(int i=0,j=cha.length-1; i<j; i++,j--){

         char temp = cha[i];

         cha[i] = cha[j];

         cha[j] = temp;

      }

   }

}

 

练习03

/*

 *获取一个字符串在另一个字符串中出现的次数。

 * "gkdabcslgfabcjdslfabckj"  "abc"

 * */

 

package String_Test;

 

publicclass String_Test_04 {

   publicstaticvoid main(String[] args){

      String str ="gkdabcslgfabcjdslfabckj";

      String key ="abc";

      System.out.println("出现的次数为:"+getStringCount(str,key));   

   } 

   //定义获取一个字符串在另一个字符串中出现的次数的方法。

   publicstaticint getStringCount(String str1,Stringkey){

      int count = 0; //定义计数器。

      int index = 0; //定义出要查的字符串脚标。     

      while((index = str1.indexOf(key))!=-1){

         System.out.println(str1);

         str1 = str1.substring(index+key.length());

         count++;

      }

      return count;

   }

}

 

练习04

/*

 *获取两个字符串中最大相同子串。

 * "fldksaheima"  "dfsheimakwlll"

 * */

package String_Test;

 

publicclass String_Test_05 {

   publicstaticvoid main(String[]args){

      Stringstr1 = "fldksaheima";

      Stringstr2 = "dfsheimakwlll";   

      System.out.println(getSimpleString(str1,str2));

   } 

   //获取两个字符串中最大相同子串的方法。

   publicstaticStringgetSimpleString(Strings1,String s2){

      //先判断两个参数谁大谁小。

      Stringmax = (s1.length()>s2.length())?s1:s2;

      Stringmin = (max == s1)?s2:s1;     

      for(int x=0; x<min.length()-1;x++){

         for(int y=0,z=min.length()-x; z!=min.length()+1; y++,z++){

            Stringtemp = min.substring(y,z);

            //System.out.println(temp);

            if(max.contains(temp))

                return temp;

         }

      }

      return"";     

   }

}

StringBuffer

StringBuffer是字符串缓冲区。

    1、它的长度是可以变化的。

    2、可以存入多种数据类型。

    3、最终通过toString方法变成字符串。

其功能:

一、存储

    append():添加数据,添加到末尾处。返回的类型还是缓冲区。

    insert(index,XXX):将XXX数据添加到index的脚标位置。

   例如:

StringBuffer sb =new StringBuffer();

      sb.append("hello").append(true).append(55);

      //方法调用链,方法的返回值类型永远都是StringBuffer同一种类型。

      //append()方法中可以添加各种数据类型。     

      sb.insert(2,"fanbo");//向缓冲区中插入fanbo这个字符串,插到脚标为2的地方。     

      System.out.println(sb);//sb的值为:hefanbollotrue55

 

二、删除

    delete(start,end):删除缓冲区的数据,从脚标start到end,包含start不包含end。返回值仍是缓冲区。

    deleteCharAt(index):删除指定脚标的字符。返回值仍是缓冲区。

   注意:清空缓冲区的操作:X.delete(0,X.length());

 

三、获取

charcharAt(int index):获取某脚标位的字符。

    intindexOf(String str):获取某字符串所处的脚标。

    intlength():获取缓冲区的长度。

    Stringsubstring(int start,int end):获取缓冲区中的子字符串,注意返回的是字符串。

 

四、修改

replace(start,end,string):用string字符串替换掉缓冲区中start脚标到end脚标的字符串。返回值仍是缓冲区。

    setChatAt(intindex,char ch):把缓冲区中index脚标的字符替换成ch。注意无返回类型,只改。

 

五、反转

revese():将缓冲区中的字符串反转。返回值仍是缓冲区。

特殊方法:

    voidgetChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

将缓冲区中的指定数据存到指定字符数组中,将缓冲区中从srcBegin到srcEnd的数据存到dstBegin脚标开始的dst字符数组中。

StringBuffer和StrinBuilder的不同:

功能都一样。

StringBuffer是线程同步。安全。

StringBuilder是线程不同步。不安全,但效率。1.5版本后出现的,出现的原因是提高效率。

开发基本都用StringBuider,遇到多线程,可以自己加锁。

升级三个因素:

1、提高效率

2、简化书写

3、提高安全性



0 0