黑马程序员——String类

本文深入讲解 Java 中 String 类的功能及使用方法,包括字符串的操作、比较、转换等实用技巧,并提供了多个示例帮助理解。

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

01-String(概述)java.lang

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

         String s = “abc”;     s = “dada”;    

其实不是“abc”这个对象改变了,只是s指向了”dada”这个对象,“abc”还存在与内存中

public class StringDemo 

{

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

        static String s2 = new String("abc");  

       //s1s2区别:s1在内存中有一个对象     s2在内存中有两个对象

      public static void main(String[] args) 

      {

           System.out.println(s1==s2);  //false 因为不是同一对象

           System.out.println(s1.equals(s2));  //String类复写了Object类中的equals方法

         //该方法用来判断两字符串是否相同,而不是比较地址值

       }

}

 

02-String(常见功能-获取和判断)

1:获取

  字符串中包含字符数,也就是字符串长度   int length();获取长度

  根据位置获取位置上字符          char charAt(int index);

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

  int indexOf(int ch);字符的哈希值   返回ch在字符串第一次出现位置,不存返回-1

 int indexOf(int chint fromIndex);  fromIndex位置开始,获取ch位置

 int indexOf(String str);字符的哈希值   返回str在字符串第一次出现位置

 int indexOf(String strint fromIndex);  fromIndex位置开始,获取str位置

 int lastIndexOf(int ch); 反向索引一个字符出现的位置    

begin,end)包含头,不包含尾。S.substring(0, s.length())   

2:判断

   字符串中是否包含某一子串   boolean contains(str);

        特殊之处:indexOf(str)可以索引str第一次出现位置,若果返回-1,表示不存在str

                  所以也可以用与对指定判断是否包含if(str.indexOf(“aa”)!=-1)

                  而且该方法既可以判断,也可以获取出现位置

   字符串中是否有内容         boolean isEmpty();  原理是判断长度是否为0

   字符串是否是以指定类容开头 boolean startsWith(str);

   字符串是否是以指定内容结尾 boolean endsWith(str);

   判断字符串内容是否相同     boolean equals(str);   复写Object类的equals方法

   判断内容是否相同,并忽略大小写  boolean equalsIgnoreCase();

public static void method_get()

{

        String str = "abcdefapf";

        sop(str.length());     //字符串长度

        sop(str.charAt(4));  //根据索引获取字符,当索引超出字符串时,会发生StringIndexOutOfBondsException

        sop(str.indexOf('a'));   

       sop(str.indexOf('a', 3));  //根据字符获取索引,从第三个开始查找      重载

       sop(str.lastIndexOf("a")); //反向索引一个字符出现的位置     重载

}

public static void method_is()

{

       String str = "StringDemo.java";

       sop(str.startsWith("String"));  //判断文件名称是否是以String开头

       sop(str.endsWith(".java"));     //判断文件名称是否是.java的文件

       sop(str.contains(".Demo"));      //判断文件是否包含Demo

}

 

 

03-String(常见功能-转换)

3:转换

   将字符数组转换成字符串

      构造函数:String(char[])   

String(char[],offset,count)将字符数组中从offset开始的count个数组转成字符串

      静态方法:

           Static String copyValueOf(char[]) 重载  static String valueOf(char[])

将字符串转成字符数组

            Char[] toCharArray();

将字符串转成字节数组String(byte [])   

String(byte[],offset,count)将字符数组中从offset开始的count个数组转成字符串

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

       Static String valueOf(int) /double  3+””=String.valueOf(3);

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

public static void method_trans()

{

       char[] arr = {'a','b','c','d','e','f','g'};

       String s = new String(arr,1,3);

       sop("s="+s);

}

04-String(常见功能-切割和替换)

  4 替换

      String  replace(oldchar,newchar);

public static void method_replace()

{

      String s = "hello.java";

      String s1= s.replace('q''n'); //如果替换的字符不存在,返回的还是原字符串

      String s2= s.replace("java""world"); 

      sop("s="+s);    //hello.java   字符串已被创建不被改变

      sop("s1="+s1); //

}

  5 切割

      String[] split(regex);

public static void method_split()

{

      String s = "zhanhua,haha,lili";

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

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

      {

           sop(arr[x]);

      }

}

 

 

05-String(常见功能-比较和去除空格)

7、转换大小写  String toUpperCase()    String toLowerCase();

   将字符串两弹多个空格去除   String trim();

   对两个字符串进行自然顺序的比较  int comparaTo(string);

                          判断返回的数师傅大于0,大于就是大 =0就是相等

                          忽略大小写

 

06-String(字符串练习1)

1 模拟一个trim方法,去除字符串两端空格

思路:

判断字符串第一个位置师傅为空格,如果是继续往下读,知道不是空格为止

结尾判断也是如此,只是方向相反

        2 当开始和结尾都判断到不是空格时,就要获取字符串   substringstart,end+1

// 1 模拟一个trim方法,去除字符串两端空格

public static String myTrim(String str)

{

        int start = 0, end = str.length()-1;

        //while执行完,start指到字符串第一个不是空格的字符

        while(start<=end && str.charAt(start)==' ')

        start++;    //,除非字符串全部是空格,第一个判断才有用   

        //while执行完,start指到字符串最后一个不是空格的字符    

         while(start<=end && str.charAt(end)==' ')   

          end--;      //这个while执行时,start已经指向第一个不是空格的字符,

         return str.substring(start,end+1);    //返回从startend的字符子串;这个方法包括前,不包括后  +1

}

 

 

07-String(字符串练习2)

将字符串进行反转。将字符串指定部分进行反转  abcdgr””rgdcba”

   思路:

      1 曾学习过对数组元素反转

      2 将字符串变成数组,对数组反转

      3 将翻转后数组编程字符串

      4 只要将被反转的部分的开始和结尾的位置作为参数传递即可(包含头不包含尾)

//2 将字符串反转 (指定的段位)  (先变成数组。 对数组反转,将数组变成字符串)

public static String reverseString(String str,int start,int end)

{

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

        reverse(chs,start,end);                       //自定义方法   反转数组

        return new String(chs);       //将数组变成字符串    有构造方法

}

public static void reverse(char[] arr,int x,int y)

{           //循环交换数组中第一个和最后一个的位置

        for(int start=x,end=y-1;start<end;start++,end--)//-1 是为了遵循包含头不包含尾

        {

                swap(arr,start,end);

         }

}

public static void swap(char[] arr,int x,int y)

{                //自定义方法,交换一个数组中两个元素的位置

        char temp = arr[x];

        arr[x]=arr[y];

        arr[y]=temp;

}

//将字符串全部反转

public static String reverseString(String str)

{

          return reverseString(str,0,str.length());

}

 

 

08-String(字符串练习3)

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

  思路: “askksaekkkerkkr”

定义一个计数器

获取kk第一次出现的位置

从第一次出现的位置后剩余字符串中继续查找kk出现的位置,获取一次就记数一次

当获取不到时,记数完成

//3  获取一个字符串在另一个字符串中出现次数

public static int getSubCount(String str,String key)

{

        int count=0,index =0;

        while((index=str.indexOf(key))!=-1)   //key出现的位置如果不等于-1 说明还没查完

        {

               sop("str="+str);

              str=str.substring(index+key.length()); // 获取字符串自定位置后的 字符子串

              count++;

        }

       return count;

}

// 3的第二种方式

public static int getSubCount_1(String str,String key)

{

       int count=0,index =0;

       while((index=str.indexOf(key,index))!=-1)   //key出现的位置如果不等于-1 说明还没查完

       {

             sop("index="+index);

              index = index+key.length();

             count++;

         }

         return count;

}

sop("count="+str.split("kk").length); 

 如果拿kk去切,当字符串kksdakkdas时会返回3   多一个空格前面

 

 

09-String(字符串练习4)

获取两个字符串中最大相同子串。第一个动作:将短的那个串进行长度一次递减的子串打印

   “abcdahellodas”“dashellog”

思路:

   1 将短的那个子串按长度递减的方式取到

   2 将每次获取到的子串去长串中判断是否包含   如果包含,已经找到

//4 获取两个字符串中最大相同子串

public static String getMaxSubString(String s1,String s2)

{

           String max = "",min = "";

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

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

           //其实就是看短字符串的所有子串在长字符串中是否存在,这里递减找到的一定是最长的

           for(int x=0;x<min.length();x++)   //控制次数,次数是短字符串的长度

           {

                  for(int y=0, z=min.length()-x; z!=min.length()+1; y++,z++)   //循环找短字符串减少x个的所有子串  中是否有符合的

                  {

                          String temp = min.substring(y, z);      //获取短字符串中从y,到z的子串

                          if(max.contains(temp))  //if(s1.indexOf(temp)!=-1)  max中是否包含temp

                          return temp;

                   }

             }

             return "";

}

 

 

10-StringBuffer(常见功能-添加)  java.lang

  StringBuffer是字符串缓冲区,是一个容器类

   特点:长度可变化;

可以直接操作多个数据类型,数组一次只能一种;

最终会通过toString()方法变成字符串

 C   create   D  delete    U   update   R  read\

1  存储:

StringBuffer sb = new StringBuffer();

//方法调用链   每个方法执行返回的都是调用对象类对象

sb.append("dsa").append("dw").append(32); //append方法将数据添加到已有数据末尾处

sb.insert(1,"qq");   //qq插入到index角标位     当角标超出时报StringIndexOutOfBoundException

                                 

11-StringBuffer(常见功能-删除和修改)

删除

sb.deleteCharAt(2);   //删除角标2出元素

sb.delete(1,3);    //删除1角标到2角标元素,不包含3

sb.delete(0,sb.length());   //清空所有元素  清空缓冲区

获取   

     Char charAt(index);

     Int indexOf(String str);

     Int lastIndexOf(String str);

     Int length();

    S tring  substing(start,end); 

修改

  StringBuffer replace(start,end,string);

  Void setCharAt(int index,Char ch);

反转   

  StringBuffer reverse();

     

将缓冲区 srcBegin  srcEnd 不包含end 的数据存入char[]数组的dstBegin角标开始

  Void  getChars(int srcBegin, int srcEnd, Char[] dst, int  dstBegin)

 

 

12-StringBuilder  JDK1.5版本后出现  

升级三要素( 提高效率   简化书写 提高安全性)

StringBuffer   线程同步

StringBuilder  线程不同步    

 StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer 

以后开发建议使用StringBuilder

 

 

13 基本数据类型对象封装成类

 byte     Byte

 short     Short

 int       Integer

 long      Long

 boolean   Boolean

 float      Float

 double    Double

 char      Character

2基本数据类型对象包装成类的常见作用: 

就是用具基本数据类型和字符串类型之间做转换

3  基本数据类型转成字符串: 

基本数据类型 + “”    基本数据类型.toString(基本数据类型值);

4  字符串转成基本数据类型:

          xxx  a  =  XxxParseXxx(String);

比如:int a = Integer.parseInt(“123”);  但是“a123”不行  格式不对

      double b = Double.parse(“12.23”);

      boolean b = Boolean.parseBoolean(“true”);

    对象调用:  int num = i.intValue();

5十进制转成其他进制   

       toBinaryString();   toHexString();  toOctalSrtring();   返回都是String

其他进制转成十进制

       parseInt(string,  radix);   string转换成radix进制

 

 

14-基本数据类型对象包装类新特性

JDK1.5版本后出现新特性

Integerx = new Integer(4);可写成 Integer x = 4; //自动装箱

x =x /*x.intValue()*/+ 2;  //x+2:x进行自动拆箱,变成了int类型,和2进行运算,再将和惊醒装箱赋值

 

Integerm = 128;

Integern = 128;

System.out.println("m=n"+(m==n));//false

Integera = 127;

Integerb = 127;

System.out.println("a=b"+(a==b));//true因为ab指向了同意个Integer对象。

                                  当数值在byte范围内时,对于新特性,如果该数值已经存在,则不会再开辟新的空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值