黑马程序员_java String类

----------------------  ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

一、  String类概述

1.1、字符串是一个特殊的对象,一旦被初始化就不可以被改变。

定义一个字符串对象:String str = “abc”;

例:String s1 = “abc”;   //s1是一个类类型变量,”abc”是一个对象;

String s2 = new String(“abc”);

 

        System.out.println(s1 == s2);  //false;

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

//true; String类复写了Object类中的equals方法,该方法用于判断字符串内容是否相同。

s1s2的区别:s1在内存中只有一个对象;s2在内存中有两个对象(new”abc”)。

 

二、字符串操作方法

String类是用于描述字符串事物的,它提供了多个方法对字符串进行操作。常见的操作方法有:

2.1、获取

A、字符串中包含的字符数,也就是字符串的长度;

       int length():获取字符串的长度;

B、根据位置获取位置上的某个字符

       char charAt(int index);

C、根据字符获取该字符在字符串中位置;

       int indexOf(int ch):返回的是ch在字符串中第一次出现的位置;

int indexOf(int ch, int fromIndex):fromIndex指定位置开始,获取ch在字符串中出现的位置;

int indexOf(String str):返回的是str在字符串中第一次出现的位置;

int indexOf(String str, int fromIndex):fromIndex指定位置开始,获取str在字符串中出现的位置。

int laseIndexOf(String str):从最后一个字符开始索引,找出字符所在位置。

 

2.2、判断

A、字符串中是否包含某一个子串;

       boolean contains(str)

特殊点:indexOf(str)可以索引str第一次出现的位置,如果返回-1则表示该str在字符串中不存在,所以也可以用于判断指定字符串是否包含。而且该方法既可以判断字符串是否包含,也可以获取该字符串出现的位置。

Egif(str.indexOf(“aa”) != -1)

B、字符串中是否有内容;

       boolean isEmpty(): 判断字符串长度是否为0

C、字符串是否以指定内容开头;

       boolean startsWith(str).

D、字符串是否以指定内容结尾;

       boolean endsWith(str).

E、判断字符串内容是否相同;原理:复写了Object类中的equals()方法。

       boolean equals(str);

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

       boolean equalsIgnoreCase(str);

示例:

  1. class StringDemo   
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         //method_get();  
  6.         //method_is();  
  7.         //method_replace();  
  8.         //method_split();  
  9.         method_7();  
  10.     }  
  11.     public static void method_get()  
  12.     {  
  13.         String str = "absktdapio";  
  14.   
  15.         //获取长度;  
  16.         sop(str.length());  
  17.         //根据索引获取字符;  
  18.         sop(str.charAt(4));  
  19.         //sop(str.charAt(40));  //当访问到字符串中不存在的角标时,  
  20.                                 //会发生StringIndexOutOfBoundsException.  
  21.         //根据字符获取索引;  
  22.         sop(str.indexOf('a'));  //默认获取第一个字符出现位置;  
  23.         sop(str.indexOf('a',2));//从指定位置开始获取字符出现位置;  
  24.         sop(str.indexOf('z'));  //如果要找的字符不存在,则返回-1;  
  25.           
  26.         //反向索引一个字符出现的位置;  
  27.         sop(str.lastIndexOf('a'));  
  28.     }  
  29.     public static void method_is()  
  30.     {  
  31.         String str = "ArrayDemo.java";  
  32.   
  33.         //判断文件名是否以"Array"开头;  
  34.         sop(str.startsWith("Array"));  
  35.         //判断文件名是否是.java文件;  
  36.         sop(str.endsWith(".java"));  
  37.         //判断文件名中是否包含"Demo";  
  38.         sop(str.contains("Demo"));  
  39.     }  
  40.     public static void method_replace()  
  41.     {  
  42.         String s = "Hello java";  
  43.         String s1 = s.replace('a','n'); //如果替换的字符不存在,返回的还是原字符串  
  44.         sop("s="+s);   //打印出的s字符串不变:Hello java;  
  45.         sop("s1="+s1); //s1将是替换后的结果:Hello jnvn.  
  46.     }     
  47.     public static void sop(Object obj)  
  48.     {  
  49.         System.out.println(obj);  
  50.     }  
  51. }
      

2.3、转换

A、将字符数组转换成字符串;

       构造函数:String (char[])

                  String (char[],offset,count):将字符数组中的一部分转换成字符串

静态方法:static String copyValueOf(char[])

                 static String copyValueOf(char[], int offset, int count)

                 static String valueOf(char[])

         B、将字符串转换成字符数组;

              char[]  toCharArray()

       C、将字节数组转换成字符串;

              String(byte[])

              String(byte[],offset,count):将字节数组中的一部分转换成字符串。

       D、将字符串转换成字节数组;

              byte[] getBytes()

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

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

              static String valueOf(int)

              static String valueOf(double)

              eg: 3+””等同于String.valueOf(3)

      

       2.4、替换

              String replace(old char, new char)

              Eg: String s = "Hello java";

String s1 = s.replace("java","world");

System.out.println(s1);   //运行结果:Hello world

 

         2.5、切割

                   String[]  split(regex)

  1.   public static void method_split()  
  2.     {  
  3.         String str = "Mike,Lucy,Lily";  
  4.         String[] arr = str.split(",");  //从,处开始切割,将切割的元素装入数组中;
  5.   
  6.         for(int x=0;x<arr.length;x++)  
  7.         {  
  8.             System.out.println(arr[x]);  
  9.         }  
  10.     }

    2.6、子串:获取字符串中的一部分

              String substring(begin);

              String substring(begin,end); 包含头不包含尾;

              如果子串中输入的角标不存在,则会出现角标越界异常。

       使用示例:str = “jablktdit”

System.out.println(str.substring(2,5)); 打印结果:blk

 

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

       A、将字符串大写转换成小写或者将小写转换成大写。

              String toUpperCase();

              String toLowerCase();

       B、将字符串两端的多个空格去掉

              String trim();

       C、对两个字符串进行自然顺序的比较

              int compareTo(String);

  1.     public static void method_7()  
  2.     {  
  3.         String s = "  Hello Java  ";  
  4.         System.out.println(s.toLowerCase());  
  5.         System.out.println(s.toUpperCase());  
  6.         System.out.println(s.trim());  
  7.   
  8.         String s1 = "abc";  
  9.         String s2 = "dhk";  
  10.         System.out.println(s1.compareTo(s2));  
  11.     }

黑马程序员_java String类 - s1160621596 - s1160621596的博客
     String 练习一:

1、从字符串s中查找出其子字符串”ss”出现的次数;

  1. class StringTest1   
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         String s = "ssqwersstyuissioyusshudfhdgjhsshthghss";  
  6.         int c = getSubCount(s,"ss");  
  7.         System.out.println("count = "+c);  
  8.     }  
  9.   
  10.     public static int getSubCount(String str,String key)  
  11.     {  
  12.         int index = 0;  
  13.         int count = 0;  
  14.           
  15.         while((index = str.indexOf(key,index)) != -1)  
  16.         {  
  17.             index = index+key.length();  //indexOf从0开始查找字符串"ss",  
  18.             count++;                     //每找到一次后就重新从index+key.length()开始查找。  
  19.         }                                
  20.         return count;  
  21.     }  
  22. }

       2、比较字符串s1s2,找出相同的最长的子字符串:

  1. class StringTest2   
  2. {  
  3.     public static String getMaxSubString(String s1,String s2)  
  4.     {  
  5.         String max = "",min = "";  
  6.         max = (s1.length() > s2.length())? s1:s2;//保证s2为短的字符串;  
  7.         min = (max == s1)?s2:s1;                 //减少循环次数;  
  8.   
  9.         for(int x=0;x<min.length();x++)  //外循环控制字符串长度;  
  10.         {  
  11.             for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)  
  12.             {                            //内循环控制在固定长度的字符串的个数;  
  13.                 String temp = min.substring(y,z);  
  14.                 if(max.contains(temp))  
  15.                     return temp;  
  16.             }  
  17.         }  
  18.         return "";  
  19.     }  
  20.   
  21.     public static void main(String[] args)   
  22.     {  
  23.         String s1 = "atghellotectkc";  
  24.         String s2 = "dhellogde";  
  25.         System.out.println(getMaxSubString(s1,s2));  
  26.     }  
  27. }


三、StringBuffer

3.1StringBuffer概述

字符串的组成原理就是通过该类实现的;

StringBuffer可以对字符串中的内容进行增删;

StringBuffer是一个容器;

很多方法与String相同;

Stringbuffer是可变长度的。

StringBuffer是字符串缓冲区。

 

3.2StringBuffer特点:

       1)、长度可以变化;

       2)、可以直接操作多个数据内型;

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

 

3.3StringBuffer作用

存储、删除、获取、修改

1)、存储

StringBuffer append():将指定数据作为参数添加到已有数据结尾处;

StringBuffer insert(offset,数据):可以将数据插入到指定offset位置。

2)、删除

StringBuffer delete(int start, int end):删除缓冲区中的数据,包含头,不包含尾;

StringBuffer deleteCharAt(int index):删除指定位置的字符。

 3)、获取

int length();

char charAt(int index);

int indexOf(String str);

int lastIndexOf(String str);

String substring(int start, int end)

4)、修改

StringBuffer replace(int start, int end, String str);

Void setCharAt(int index , char ch);

5)、反转

StringBuffer reverse();

6)、将缓冲区中的指定数据存储到指定字符数组中。

void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

示例:

 
  1. class StringBufferDemo   
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         StringBuffer sb = new StringBuffer("abcdefg");  
  6.         char[] chs =new char[6];  
  7.         sb.getChars(1,4,chs,2);//将字符串sb中1~4字符(即bcd)存入到数组chs中,  
  8.                                //从角标2开始存储,空位为空,越过角标将发生角标越界异常;  
  9.         System.out.print("[");  
  10.         for(int x=0;x<chs.length;x++)  
  11.         {  
  12.             if(x != chs.length-1)  
  13.                 System.out.print(chs[x]+",");  
  14.             else  
  15.                 System.out.println(chs[x]+"]");//最后打印结果:[ , ,b,c,d, ];  
  16.         }  
  17.         //method_del();  
  18.         //method_update();  
  19.     }     
  20.     public static void method_add()  
  21.     {  
  22.         StringBuffer sb = new StringBuffer();  
  23.         sb.append("Hello ").append("Java ").append("World!!!");  
  24.         System.out.println(sb.toString());  //输出:Hello Java World!!!  
  25.           
  26.         sb.insert(6,"ok ");  //在位置6插入ok 字符串;  
  27.         System.out.println(sb.toString());  
  28.     }  
  29.   
  30.     public static void method_del()  
  31.     {  
  32.         StringBuffer sb = new StringBuffer("HelloJava");  
  33.   
  34.         sb.delete(1,3);  //打印结果:HloJava;  
  35.         System.out.println(sb.toString());  
  36.         sb.deleteCharAt(2); //删除第2个字符;打印结果:HlJava  
  37.         System.out.println(sb.toString());  
  38.         //清空缓冲区  
  39.         sb.delete(0,sb.length());  
  40.         System.out.println(sb.toString());  //打印为空;  
  41.     }  
  42.   
  43.     public static void method_update()  
  44.     {  
  45.         StringBuffer sb = new StringBuffer("abcdefg");  
  46.   
  47.         //sb.replace(1,4,"java");  //打印结果:ajavaefg  
  48.         sb.setCharAt(2,'j');  //打印结果:abjdefg  
  49.         System.out.println(sb.toString());  
  50.     }  
  51. }
     

四、StringBuilder

       StringBuilderJDK 1.5版本之后出现的。

      升级原因:

                     1)、提高效率;

                     2)、简化书写;

                     3)、提高安全性。

       StringBuffer是线程同步的;

       StringBuilder是线程不同步的;

       其他用法与StringBuffer用法相同;

       开发建议使用StringBuilder


----------------------  ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值