黑马程序员_Java学习日记_JAVA中API中对象String和StringBuffer/StringBuilder

黑马程序员-学习日记

 

黑马程序员_JAVA中API中对象String和StringBuffer/StringBuilder

 

------- android培训java培训、期待与您交流! ----------

 

一:String对象:

String类的成员使用

1,构造函数。

       可以通过字符串的构造函数,

       将一个字节数组或者字符数组或者int型数组中的一部分变成一个字符串对象。

       代码体现:

       public static void consMethod()

       {

              String s = new String();

              String s1 = "";

              System.out.println(s.equals(s1));

       //将字节数组的一部分变成字符串对象

              byte[] arr = {98,99,100};

              String s2 = new String(arr,0,arr.length);

              System.out.println("s2="+s2);

       //将字符数组的一部分变成字符串对象

              char[] arr1 = {'q','c'};

              String s3 = new String(arr1,1,1);

              System.out.println("s3="+s3);

        //将字节数组的一部分变成字符串对象

              int[] arr2 = {65,66,67};

              String s4 = new String(arr2,0,arr2.length);

              System.out.println("s4="+s4);

       }

2,一般函数:

二:字符串对象所具备的功能:

1,判断。

       1.1 判断两个字符串内容是否相同。

              boolean equals(Object):覆盖了Object类中的方法。

       1.2 判断两个字符串内容是否相同,忽略大小写。

              boolean equalsIgnoreCase(string)

       1.3 判断一个字符串中是否包含另一个字符串。

              boolean contains(string):jdk1.5出现的功能。

       1.4 判断一个字符串是否以一个字符串开头。

              boolean startsWith(string):

       1.5 判断一个字符串是否以一个字符串结尾。

              boolean endsWith(string);

       1.6 判断字符串是否有具体的字符数据。或者成为判断字符串是否有内容。

              boolean isEmpty():原理就是判断字符串的长度是否为0.该方法是jdk1.6版本。

              public boolean isEmpty(){

                     return this.length()==0;

              }

       代码体现:

       public static void method(){

              //判断字符串内容是否相同,忽略大小写。

              String s1 = "abc";

              String s2 = "Abc";

              System.out.println("s1.equals(s2):"+s1.equals(s2));

              System.out.println(("s1.equalsIgnoreCase(s2):"+s1.equalsIgnoreCase(s2));

        //判断字符串是否包含指定字符串

              String s3 = "kkabcde";

              System.out.println(("s3.contains(s1)="+s3.contains(s1));

        //判断字符串是否是以指定字符串开头

              System.out.println(("s3.startsWith(ab)="+s3.startsWith("kk"));

        //判断字符串是否是以指定字符串结尾

              String s4 ="StringDemo.java";

              System.out.println("s4.endsWith(.java)="+s4.endsWith(".java"));

        //判断字符串是否有内容

              String s5 = "";

              System.out.println("s5.isEmpty()="+s5.isEmpty());

       }

       2.获取

              2.1 获取字符串的长度。

                     int length();

              2.2 根据指定的位置获取该位置对应的字符。

                     char charAt(index);

              2.3 根据字符获取该字符第一次出现的位置

                     int indexOf(ch);

                     int idnexOf(ch,fromIndex):从fromIndex位置开始获取ch第一次出现的位置。

                     找到了就返回第一次出现角标位,没找到,就返回-1.所以,

                     可以通过-1这种方式判断一个字符是否在字符串存在。

              2.4 根据字符串获取该字符串第一次出现的位置

                     int indexOf(string);

                     intidnexOf(string,fromIndex):从fromIndex位置开始获取string第一次出现的位置。找到了就返回第一次出现角标位,没找到,就返回-1.所以,可以通过-1这种方式判断一个字符串是否在字符串存在。这既是contains方法原理。

              2.5 同样是获取一个字符或者字符串第一次出现的位置,但是是通过反向索引完成。

                     功能和indexOf一致。

                     int lastIndexOf(ch);

                     intlastIdnexOf(ch,fromIndex):

                     int lastIndexOf(string);

                     intlastIdnexOf(string,fromIndex):

              2.6 获取字符串中的一部分字符串。

                     String substring(start):从start开始到结尾。

                     Stringsubstring(start,end);获取到的字符串包含start位,不包含end位。

classStringMethodDemo {

   public static void sop(String str){

   System.out.println(str);

}

   public static void main(String[] args) {

    method();

}

   public static void method(){

   String s1 = "abcedfckk";

   sop(s1);

   //根据指定位置获取该位置的字符

   sop("s1.charAt(2):"+s1.charAt(2));

   //从第3个位置开始查找指定字符出现的位置

  sop("s1.indexOf(c)="+s1.indexOf('c',3));

   //从开始位置开始查找指定字符出现的位置

   sop("s1.indexOf(q)="+s1.indexOf('q'));

   //从开始位置开始查找指定字符串出现的位置

  sop("s1.indexOf(ckq)="+s1.indexOf("ckq"));

   //反向开始查找指定字符出现的位置

  sop("s1.lastIndexOf(c)="+s1.lastIndexOf('c'));

   //从指定位置开始获取字符串的一部分

  sop("s1.substring(2):"+s1.substring(2));

   //获取整串 s1.substring(0,s1.length());

   sop("s1.substring(2,5):"+s1.substring(2,5));

   sop("s1="+s1);// 原串没变化。

}

}

3,转换:

              3.1 将字符串转成字节数组。

                     byte[] getBytes():编码解码时较为常用。还有在io流操作字节数据也很常用。

              3.2 将字符串转成字符数组。

                     char[] toCharArray():

              3.3 将字符数组或者数组中的一部分转成字符串。

                     static String copyValueOf(char[])

              3.4 将字符数组或者数组中的一部分转成字符串。

                     static StringvalueOf(char[]):

              3.5 基本数据类型变成字符串。

                     static String valueOf(int);

                     static StringvalueOf(double);

                     static StringvalueOf(boolean);

                     ...

                     int x = 3;

                     String.valueOf(x);-->"3";

                     x+""--> "3";

              3.6 将对象变成字符串   staticString valueOf(object)和object.toString():结果是一样的。

              3.7 将字符串转成大写或者小写。

                     小写:toLowerCase():

                     大写:toUpperCase():

              3.8 String concat(String str)

                   将指定字符串连接到此字符串的结尾。

    public static void main(String[] args) {

        //将指定字符串连接到此字符串的结尾。

              System.out.println("abc".concat("kk"));

              System.out.println("abc"+"kk");

       }

       public static void method_4(){

              String s = "aBQQQc";

        //将指定字符串转换成大写或者小写

              System.out.println(s.toUpperCase());

              System.out.println(s.toLowerCase());

              System.out.println(s);

       }

       public static void method_3(){

              String s = "abc";

              //将字符串转化成字节或者字符数组

              byte[] arr = s.getBytes();

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

                     System.out.println(arr[x]);

              }            

              char[] arr1 = s.toCharArray();

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

                     System.out.println(arr1[x]);

              }

       }     

       public static void method(){

              Demo d= new Demo();

              //将基本数据类型转化成字符串

              String s = String.valueOf(d);

              //调用的是Object父类中的方法

              System.out.println(d.toString());

              System.out.println(s);

       }

4,替换。

       4.1 替换字符。

                     Stringreplace(oldChar,newChar):

       4.2 替换字符串

                     Stringreplace(string,string);

5,切割:String[] split(regex);

6,去除字符串两空格。

       String trim();

classStringMethodDemo{

       public static void sop(String str){

              System.out.println(str);

       }

       public static void main(String[] args) {

              method_4();

       }

       public static void method_4(){

              //按字典顺序比较字符串

              int num ="ba".compareTo("bc");

              sop("num="+num);

               通过对返回结果的判断,发现 除了正数,就是负数,要么就是0.

               左边的对象如果大于右边的对象,返回正数,

               左边小于左边,返回负数。

               左边等于右边,返回0.

       }

       public static void method_3(){

              String s = "      ab  c    ";

              sop("--"+s+"--");

              //trim()去除字符串中的空格

              sop("--"+s.trim()+"--");           

       }

       public static void method_2(){

              String s ="zhangsan.lisi.wangwu";    

              //用.进行切割

              String[] arr =s.split("\\.");

              s = "qqsdqqfgqqhjkqq";

              //用字符串"qq"进行切割

              String[]arr1 = s.split("qq");

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

                     System.out.println(arr1[x]+"--");

              }

       }

       public static void method_1(){

              String s = "java";

              //用指定字符替换字符串中的字符

              sop("s.replace(a,k)="+s.replace('a','k'));

              sop("s.replace(av,qq)="+s.replace("av","qq"));

       }

}

5.字符串中的基本属性:

class StringTest {

       public static void main(String[] args) {

              String s1 = "java";

              String s2 = "hehe";

              test(s1,s2);

              System.out.println(s1+"....."+s2);//字符串一旦初始化就不会被改变。

              //System.out.println(s1.charAt(10));//StringIndexOutOfBoundsExceptio

              //StringIndexOutOfBoundsException:只要访问到字符串中不存在的角标,就会在运行时期,发生该异常。

              //System.out.println(s1.substring(2,19));

              System.out.println(s1.replace('k','n'));//当要替换的字符不存在时,结果是原来的字符串。

              System.out.println("-"+s1.substring(1,1)+"-");//当头尾角标相等时,结果是 "" 空字符串。

              System.out.println("--"+s1.substring(4)+"--");//当开始角标等于长度时,结果是 "" 空字符串。

       }

       public static void test(String s1,Strings2){

              s1.replace('a','k');

              s1 = s2;

       }

}

class StringDemo {

       public static void main(String[] args) {

              String s = "abc";//定义了一个字符串类型的数据; "abc" 是一个字符串对象。

              //字符串一旦被初始化就不会被改变;因为字符串是一个常量。       

              //s = "ddd";str重新指向"ddd"这个对象。 而"abc"没有变化过。

              String s1 = "abc";//s1对应的字符串已经存在于内存中,所以不会在重新开辟空间,

                                          //所以s1和s指向的同一个对象.

              System.out.println(s==s1);//true

              String s2 = "abc";

              String s3 = newString("abc");

              //这种两种定义"abc"字符串的方式都可以。s2相对简单,一般都按照s2这样定义。

              //s2和s3的其他区别:

              //1,地址值一样。

              //2,创建s2并初始化,内存中只有一个对象。就是字符串对象。

                     //创建s3并初始化,内存有两个对象,一个是new,一个是字符串。

              System.out.println("s2==s3:"+(s2==s));

              System.out.println(s2.equals(s3));//String类的equals方法复写Object中方法,比较是字符串的内容是否相同。

              String s4 = "ab";

              String s5 = "c";

              String s6 = s4+s5;

              String s7 ="ab"+"c";

              System.out.println("s1==s6:"+(s1==s6));//false

              System.out.println("s1==s7:"+(s1==s7));//true;

       }

}

三:StringBuffer和StringBuilder

StringBuffer:字符串缓冲区,缓冲区用于存储数据,所以它也称之为容器。

A.缓冲区的特点:

       1,可以添加基本数据和引用数据。添加数据完毕;一般都需要将其转成字符串进行使用;通过toString方法转成字符串。

       2,该容器和数组不一样,数组是固定长度的,而且只能添加同一类型;而StringBuffer长度是可变的,可以添加不同类型。

       类型一致的数据,可以使用数组,也可以StringBuffer。

       但是数组添加元素,可以保证数据的类型不变;而StringBuffer添加完数据,全变成字符串。

       3,StringBuffer可以对字符串进行修改。

       其实StringBuffer之所以可以存储数据,就是因为底层封装是一个字符数组。

B.StringBuffer都具备的常见功能:

1,添加。

        StringBuffer append():可以将基本数据类型数据和引用类型数据添加到缓冲区。注意:不可以直接操作short byte. 将数据添加到缓冲区的末尾,数据追加;这个方法返回来的还是原来的缓冲区对象。

2,删除。

       StringBuffer delete(start,end);

       StringBuffer deleteCharAt(index):

3,获取字符串的出现的位置。

       int lastIndexOf(str);

       int indexOf(str);

4,替换:

       StringBuffer replace(start,end,string);

5,修改:

       void setCharAt(index,char);

6,反转:

       StringBuffer reverse();

classStringBufferDemo {

       public static void main(String[] args) {     

              method_3();

       }

       public static void method_3(){

              StringBuffer sb = newStringBuffer("abcde");

 

              sb.replace(1,4,"haha");//替换

              sb.setCharAt(2,'k');//修改

              sb.setLength(3);//设置字符串的长度

              System.out.println(sb);

       }

       public static void method_2(){

              StringBuffer sb = newStringBuffer("abcde");

              sb.insert(1,"ak");//将字符串插入到此字符序列中

              sb.delete(1,3);//从指定位置删除

              //清空缓冲区。

              sb.delete(0,sb.length());

              sb.deleteCharAt(3);//删除指定位置的元素

              System.out.println(sb);

       }

       public static void method_1(){

              StringBuffer sb = newStringBuffer();

              sb.append(34).append("haha").append('k').append(true);//方法调用链 

              System.out.println(sb.toString());

       }

}

C.JDK1.5版本出现了一个新对象StringBuilder

该对象功能和StringBuffer一致。

区别:

StringBuffer:是线程安全的。

StringBuilder:是线程不安全的。

开发时常用的是:StringBuilder.因为一般都是单线程;主线程在运行。如果真的有了多线程,那么建议使用StringBuffer.

StringBuilder的出现,是为了提高了效率。

classStringBuilderDemo {

       public static void main(String[] args) {

              StringBuilder s1 = newStringBuilder("java");

              StringBuilder s2 = newStringBuilder("haha");

              show(s1,s2);

              System.out.println(s1+"....."+s2);

       }

       public static void show(StringBuilder s1,StringBuilder s2)

       {

              s1.append(s2);

              s1 = s2;

       }

}

classStringBuilderTest {

       public static void main(String[] args) {

              int[] arr  = {3,1,5,6,2};

              method_2(arr);

       }

D.String和StringBuilder的区别?

       对数据相连接变成新的字符串;StringBuilder比String效率高些。

       String一旦被初始化不可以被改变;StringBuilder,可以对字符串进行修改。

       在将int数组变成字符串时建议使用method_2();

       因为method_1,在运行时,会在内存中产生过多的字符串对象;而在method_2中只有一个StringBuilder对象。

       举例:将一个int数组变成字符串。

       public static void method_1(int[] arr){

              String s = "[";

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

                     if(x!=arr.length-1)

                            s+=arr[x]+",";

                     else

                            s+=arr[x]+"]";

              }

              System.out.println(s);

       }

       public static void method_2(int[] arr){

              StringBuilder sb = newStringBuilder();

              sb.append("[");

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

                     if(x!=arr.length-1)

                            sb.append(arr[x]+"-");

                     else

                            sb.append(arr[x]+"]");

              }

              System.out.println(sb);

       }

}

 

------- android培训java培训、期待与您交流! ----------  详细请查看:http://edu.csdn.net/heima/

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java String 类型 API 测试代码 1.String和char[]之间的转换 toCharArray(); 2.Stringbyte[]之间的转换 getBytes() Arrays工具类 : Arrays.toString(names) StringString replace(char oldChar, char newChar) String replace(CharSequence target, CharSequence replacement) String[] split(String regex) boolean contains(CharSequence s):当且仅当此字符串包含指定的 char 值序列时,返回 true int indexOf(String str):返回指定子字符串在此字符串第一次出现处的索引 int indexOf(String str, int fromIndex):返回指定子字符串在此字符串第一次出现处的索引,从指定的索引开始 int lastIndexOf(String str):返回指定子字符串在此字符串最右边出现处的索引 int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串最后一次出现处的索引,从指定的索引开始反向搜索 boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束 boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始 boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始 int length():返回字符串的长度: return value.length char charAt(int index): 返回某索引处的字符return value[index] boolean isEmpty():判断是否是空字符串:return value.length == 0 String toLowerCase():使用默认语言环境,将 String 的所有字符转换为小写 String toUpperCase():使用默认语言环境,将 String 的所有字符转换为大写 String trim():返回字符串的副本,忽略前导空白和尾部空白 boolean equals(Object obj):比较字符串的内容是否相同 boolean equalsIgnoreCase(String anotherString):与equals方法类似,忽略大小写 String concat(String str):将指定字符串连接到此字符串的结尾。 等价于用“+” String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。 String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值