黑马程序员--java基础--String

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

目录:

1、String类及常用方法    2、StringBuffer和StringBuilder       3、字符串总结


1.String类及常用方法 

1.概述:

  public final class String 它是一个final类,所以不可以被继承。
  String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
  字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。
  String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、提取子字符串、
  创建字符串副本并将所有字符全部转换为大写或小写。

    除非另行说明,否则将 null 参数传递给此类中的构造方法或方法将抛出 NullpointerException

    字符串最大特性:一旦被初始化,就不可以被改变。

2.字符串创建:(字符串常量池和构造方法的参数类型)

    (1).构造方法:根据参数类型不同分为以下6种:

               空参String()、byte[]类型String(byte[] bytes)、char[]类型String(char[] value)、

              String类型String(String str)、StringBuffer类型String(StringBuffer buffer)、StringBuilder类型String(StringBuilder builder)

              注意:其中接收byte[]类型和char[]类型参数的构造方法中,可以对数组指定offset和length,且byte[]中还可以指定编码集。

     (2).直接创建字符串常量:位于常量池中,常量字符串相加依然位于常量池中,含引用的相加则会产生位于堆内存的新字符串

 

public static void constantPool(){  
    String str1 = "hey";  
    String str2 = new String("hey");  
  
    String str3 = str1+"world";  
    String str4 = "hey"+"world";  
    String str5 = "heyworld";  
      
    //常量与new出来的相比为false   
    System.out.println(str1==str2);//false   
    //含引用的字符串与常量比较为false,因为内部会使用字符串缓冲区创建新的对象然后赋值   
    System.out.println(str3==str4);//false   
    //同上   
    System.out.println(str3==str5);//false   
    //常量与常量比较为true   
    System.out.println(str4==str5);//true   
}  


 

3.String类常用方法:

  (1).判断:
      |-- boolean equals(String str) 比较字符串的内容是否相等
      |-- boolean  equalsIgnoreCase(String str) 忽略大小写进行比较
      |-- boolean contains(String s) 判断一个字符串是否包含另一个字符串
      |-- boolean startsWith(String) 判断一个字符串是否以另一个字符串开头
      |-- boolean endsWith(String) 判断一个字符串是否以另一个字符串结尾
      |-- boolean isEmpty()判断一个字符串是否有内容

public static void estimateMethod(){  
    //1。equals方法,比较字符串内容是否相同,==则是比较引用地址是否相同   
    String str1 = "hello";  
    String str2 = new String("hello");  
    //地址不同但内容相同,所以equals为true   
    System.out.println(str1.equals(str2));  
  
    //2。startsWith方法,是否以指定字符串开始   
    String str3 = "我是黑马";  
    System.out.println(str3.startsWith("我是"));  
  
    //3。endsWith方法,是否以指定字符串结尾   
    System.out.println(str3.endsWith("黑马"));  
  
    //4。contains方法,是否包含某个字符串   
    System.out.println(str3.contains("是黑"));  
  
    //5。isEmpty方法,字符串是否为空   
    System.out.println(str3.isEmpty());  
}  


(2).获取
       

      char charAt(int index索引) 返回指定索引位置上的字符
      String substring(int start,int end)获取字符串中的一部分,包含头不包含尾,返回一个新字符串
      String substring(int start) 获取从指定位置开始的字符串
      int length();字符串长度

      int indexOf(char c)查找指定字符在字符串中第一次出现的索引
      int indexOf(char c,int fromIndex)指定从哪个位置开始查找
      int indexOf(String s)
      int indexOf(String s,int fromIndex)

      int lastIndexOf(char c) 和indexOf功能一致,但是反向搜索,返回的下标不能反着数
      int lastIndexOf(char c,int fromIndex)
      int lastIndexOf(String s)
      int lastIndexOf(String s,int fromIndex)

public static void getMethod(){  
    String str = "我是获取方法中的字符串";  
      
    //1。charAt方法,获取指定位置的字符   
    System.out.println(str.charAt(0));  
      
    //2.substring方法,获取指定位置的字符串,含头不含尾,注意end取值范围str.length()   
    System.out.println(str.substring(0));  
    System.out.println(str.substring(0,str.length()));  
      
    //3。indexOf和lastIndexOf方法,获取指定字符或者字符串的索引,还可以指定索引位置fromIndex   
    System.out.println(str.indexOf('串'));  
    System.out.println(str.lastIndexOf("串"));  
}  


(3).转换
      byte[]b getBytes()字符串转成字节数组
      char[] ch toCharArray()字符串转成字符数组
      String toUpperCase()将字符串转成大写
      String toLowerCase()将字符串转成小写

      static String valueOf() 任意类型转成字符串

public static void convertMethod(){  
    String str = "1314521";  
    //1。getBytes方法,返回字节数组   
    byte[] bytes = str.getBytes();  
    for(byte i : bytes){  
        System.out.println((char)i);//注意此时的字节数组已经代表为编码集中的标号   
    }  
      
    String str1 = "Make A Promise";  
    //2。toCharArray()方法,返回字符数组   
    char[] chars = str1.toCharArray();  
    for(char ch : chars){  
        System.out.println(ch);  
    }  
  
    //3。toUpperCase方法,返回全大写   
    System.out.println(str1.toUpperCase());  
  
    //4。toLowerCase方法,返回全小写   
    System.out.println(str1.toLowerCase());  
  
    //5。valueOf方法,将任意类型转为字符串   
    boolean flag = true;  
    System.out.println(flag);  
}  


(4).其他方法
      String[] split() 切割字符串
      boolean matches()  字符串匹配
      String replace(老的,新的)替换字符或者字符串
      String replaceAll();替换字符串
      String trim() 去掉字符串两端空格
      String intern()  优先返回常量池中的字符串,没有才创建

public static void otherMethod(){  
    String str = " hello world  ";  
    //1。split方法,返回String[]   
    String[] strArr = str.split(" ");//注意空格的位置前后也有影响,在前面则数组长度多1,后面则不   
    System.out.println(strArr.length);  
    for(String strEle : strArr){  
        System.out.println(strEle);  
    }  
  
    //2。matches方法,匹配字符串   
    System.out.println(str.matches(" hello world  "));  
  
    //3。replace和replaceAll方法   
    System.out.println(str.replace('h','w'));  
  
    //4。trim方法,取出两端空格   
    System.out.println(str);  
    System.out.println(str.trim());  
  
    //5。intern方法,优先获取常量池中的字符串,没有则创建   
    String str2 = str.intern();  
    System.out.println(str==str2);  
}


2.StringBuffer和StringBuilder     

     1.比较:

      相同处:二者方法都是一样的,都可以创建可变字符串,底层结构都是可变字符数组。
      区别处:StringBuffer是线程安全的,StringBuilder是线程不安全的,但StringBuilder的效率比StringBuffer高
                     不涉及安全的时候,建议使用StringBuilder。

      2.特有方法:

         |-- append(任意类型) 向缓冲区追加数据 增
         |-- insert(int offset,任意类型) 向缓冲区中指定的位置上,插入数据 增
         |-- delete(int start,int end) 删除缓冲区中的数据 , 删除
         |-- setCharAt(int offest,char c) 修改指定位置上的字符,修改
         |-- reverse()方法,字符序列进行翻转

public static void main(String[] args)  
{  
    StringBuffer strBuf = new StringBuffer();  
    //1。append方法,追加数据      
    strBuf.append("hello");  
    boolean flag = false;  
    strBuf.append(flag);  
    int number = 12;  
    strBuf.append(number);  
  
    System.out.println(strBuf);  
  
    //2。insert方法   
    strBuf.insert(5," world ");  
    System.out.println(strBuf);  
      
    //3。delete方法   
    strBuf.delete(5,12);  
    System.out.println(strBuf);  
      
    //4、setCharAt方法   
    strBuf.setCharAt(5,' ');  
    System.out.println(strBuf);  
  
    //5.reverse方法   
    strBuf.reverse();  
    System.out.println(strBuf);  
}  


 

3. 字符串总结

      字符串的方法比较多,最重要的是要举一反三,而不要思维僵化,当String类本身的方法不足以解决问题时,

      可以考虑转为数组或者转为缓冲区对象,进而可使用他们的方法来解决问题,选择最为合适的方法来提高效率。

      如以下练习:

      1.如何操作一个字符串使其反转,按自然顺序进行排序,大小写互转等等诸如此类操作。

      2.模拟trim方法,去除字符串两端空格

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

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



 

 

------- android培训java培训、期待与您交流! ----------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值