String类

第四章:String类


String类
用于描述字符串事物。学习重点:特性(不改变)和使用方法。
API就是java对外提供的应用程序接口的说明,例如,Thread类、Runnable接口、String类等。可以使用目标方法的结果的类型,来查找目标方法。
    字符串是一个特殊的对象。很多语言都有对字符串的描述和功能的提供。被final修饰,意味不能有子类,且内容一旦确定,不能更改。
    构造方法很多,例如,String s = new String(“abc”);String s1 = “abc”;构造内容一样,后者更常用。s1是一个类类型变量,”abc”才是对象。不一定非要有new才是对象。只要是双引号内的内容,都是String类的对象。
    字符串最大的特点:一旦被初始化,就不能改变(属性)。变量s1可以变化,指向其他对象,但是对象”abc”不会变化。字符串不像其他对象,可以通过改变属性来改变对象自身。
    String类复写了Object类中的equals方法,该方法用于判断字符串内容是否相同,而不是以前的内存地址值是否一致。对象可以不相同,但内容可以相同。
String s1 = "abc";和String s2 = new String("abc");的对比。s1在内存中有一个对象;s2在内存中有两个对象,new和”abc”都是对象。
内存中有常量池,里面有各种字符,字符串通过组合字符并将其放到数组中来构建对象。例如,String s1 = "abc"; 和String s3 = "abc";,s1等于s3,都指向同一个对象。”abc”创建后,s3不会再独立开辟空间,避免浪费,而是直接指向已有的对象。方法区内存有,静态成员、方法和常量池。
字符串特点:1. 是个对象。2. 常量,不能被改变。3. s1和s2的区别。4. 字符串的比较——equals方法。
   
    常见功能
    必须熟练到不用查阅API文档,依然可以应用自如。
    String类用于描述字符串事物,提供了多个方法用于对字符串进行操作。
    1. 获取
    1.1 字符串中包含的字符数,即长度,
int length();这是方法,不是属性,需要加括号。不同于数组。
    1.2 根据位置获取某个字符。
char charAt(int index);类似数组排列。索引从0开始。当访问到字符串中不存在的角标时,会出现字符串角标异常。
    1.3 根据字符获取该字符的位置。
int indexOf(int ch);返回的是ch在字符串中第一次出现的位置。如果没有找到,返回-1。
int indexOf(int ch, int fromIndex);从fromIndex指定位置开始,获取字符ch在字符串中的位置,依然是正常位置。
int lastIndexOf(int ch);反向索引,返回最后一次出现的位置。
int indexOf(String str);返回的是str在字符串中第一次出现的位置。
int indexOf(String str, int fromIndex);从fromIndex指定位置开始,获取字符串str在字符串中的位置。
int lastIndexOf(String str);反向索引,返回最后一次出现的位置。
 
    2. 判断
    2.1 字符串中是否包含某个子串。
        boolean contains(String str);
        另类写法:indexOf(String str);索引str第一次出现的位置,返回-1表示没有改字符串,所以也可以用于判断指定字符串是否包含,只要不等于-1就是包含。该方法既可以判断,由可以获取出现的位置。
    2.2 字符串中是否有内容。
        boolean isEmpty(String str);原理就是判断长度是否为0。” ”和null不同,前者是对象,后者指向为空。
    2.3 字符串是否是以指定内容开头。
        boolean startsWith(String str);
    2.4 字符串是否是以指定内容结尾。
        boolean endsWith(String str);
    2.5 判断字符串的内容是否相同。
        boolean equals(String str);复写了Object类中的方法。
    2.6 判断内容是否相同并忽略大小写。用于录入用户名时忽略大小写。全部变成小写再比较。
        boolean equalsIngoreCase(String str);
 
    3. 转换
    3.1 将字符数组转成字符串。
        构造函数:String(char[] ch)将整个字符数组转换成字符串。
                  String(char[] ch, int offset, int count)将字符数组中的一部分转成字符串。offset为起始角标,count为字符个数。
 
        静态方法:static String copyValueOf(char[] ch);必须由字符串类或对象调用,例如,s1 = String.copyValueOf(arr);。
                  static String copyValueOf(char[] ch, int offset, int count);字符数组部分转换成字符串。
                  static String ValueOf(char ch); 单个字符转换成字符串。
 
    3.2 将字符串转成字符数组。
        char toCharArray();操作对象自身,所以没有参数。
       
    3.3 将字节数组转成字符串。
        构造函数:String(byte[] ch)每个整数对应字符,将字符连接成字符串。整数范围在byte内。
                  String(byte[] ch, int offset, int count)将字节数组中的一部分转成字符串。
 
    3.4 将字符串转成字节数组。
        byte[] getBytes();
 
    3.5 将基本数据类型(单个)转换成字符串。
        static String valueOf(int a);例如,3+” ”相当于String.valueOf(3);后者比较专业,但比较麻烦;一般常用前者。类似于’a’+0,获得对应整数,类型提升。表达式也可以。
        static String ValueOf(double b);
        特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
 
    4. 替换
       String replace(char oldchar, char newchar);注意:因为字符串初始化后不能改变,替换回产生新的字符串对象;如果指向不变,需要重新赋值,例如,s1=s1.replace('a','x');。再就是所有原有字符全部被替换。如果要替换的字符不存在,依然返还原字符串。
       String replace(String oldString, String newString);替换部分字符串。
 
    5. 切割
       String[] split(regex);参数为切割标记。切割后形成字符串数组,”.”无法切割。切割符随意,字母也可以,获得的是分开的部分,分割符拿不到。
          
    6. 子串,获取字符串中的一部分
       String substring(int begin)从指定位置开始到结束。如果指定位置不存在,产生字符串角标越界异常。
       String substring(int begin, int end);从指定位置开始到指定位置的前一个结束,包含头不包含尾,可以理解为s.substring(0, s.length())。字符位置为表达式也可以。
      
    7. 转换、去除空格、比较
    7.1 将字符串转换成大写或小写。
        String toUpperCase();大写
        String toLowerCase();小写
    7.2 将字符串两端的多个空格去除。用于用户登录时去掉空格。
        String trim();
    7.3 对两个字符串进行自然顺序的比较。按照字典顺序比较,this在编码表的值减去str在编码表的值。相同的不需要比较。
        int compareTo(String str);
 
    java中,取某一范围内的数据,包含头,不包含尾,这是惯例。因为尾一般是数组的长度,减一表示最后一个角标。
 
    StringBuffer类
    Buffer意为,缓冲区。final,不能有子类。
    字符串的组成原理就是通过该类实现的。
    StringBuffer本质是一个容器,类似数组。所以StringBuffer的对象发生改变,依然是原有对象。容器的内容发生改变,不会改变容器本身。例如,StringBuffer sb1 = sb.append(34);,sb和sb1依然是同一个对象。
    特点(使用条件):
1. 长度可以变化。
2. 可以同时操作多种数据类型。
3. 最终通过toString方法变成字符串。
 
    使用:1. 存储。2. 删除。3. 获取。4. 修改。C creat U update R read D delete增删改查
   
    1. 存储
    可以存储各种基本数据类型,但是没有byte和short,使用时提升。
    StringBuffer append(String s) 将指定的数据作为参数添加到已有数据的结尾处。返回的是原缓冲区对象。
    方法调用链,例如,sb.append("abc").append(true).append(34);//同一个对象,不断调用方法。
    StringBuffer insert(index,数据),可以将数据插入到指定index位置。但是不能角标越位。
   
    2. 删除
    StringBuffer delete(int start, int end)删除缓存区内某一范围内的数据,包含头不包含尾。清空缓冲区,sb.delete(0,sb.length());注意,不包含尾。指定位置一样,不会删除。例如,sb.delete(2,2);
    StringBuffer deleteCharAt(int index);删除指定位置的字符。
 
    3. 获取
     char charAt(int index)
     int indexOf(String str)
     int lastIndexOf(String str)
     int length()
     String substring(int begin)注意返回值是String类型。
 
    4. 修改
     replace(int start, int end, String str)将指定范围的字符串替换掉。
     void setCharAt(int index, char ch)只替换单个字符。注意,不返回。
    
    5. 反转
     StringBuffer reverse()反转,依然返回StringBuffer。
             
    6. 存值
     void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)将缓冲区中的指定数据存储到指定字符数组中,从指定位置开始。需要保证,提出的字符数不大于字符数组的长度,否则异常。
   
    StringBuilder类
    一个可变的字符序列,与StringBuffer兼容API,作为StringBuffer的简易替换。StringBuild不保证同步,StringBuffer保证同步。作为一个容器,可能会遇到多个线程同时操作数据的情况,同步比较安全,但是要判断锁,浪费资源。所以,多线程用StringBuffer,如果用StringBuild,需要自己加锁(Lock和Condition);单线程用StringBuild,节省资源。简易使用StringBuild。
    java升级的原则:提高效率;简化书写;提高安全性。
   
    基本数据类型对象包装类
    都可以由字符串或对应的基本数据构造而成。                             
    
     Integer类,已经定义好最大值、最小值。Integer.MAX_VALUE,用于判断int型数据的范围,提高安全。equals复写了方法,比较数值是否相同。
 
     基本数据类型对象包装类的常见作用:用于基本数据类型和字符串类型之间的转换。
     1.基本数据类型——》字符串:方法:
1.1 基本数据类型+” ”(类型提升)
1.2 static String valueOf(int x);字符串类的静态方法
1.3 基本数据类型包装类.toString(基本数据类型值),静态方法,返回一个整数的String对象。例如,Integer.toString(34);将34变成字符串。
1.4 String toString()空参数非静态方法,返回Integer值的String对象,需要和构造函数配套使用。
 
2. 字符串——》基本数据类型:
     应用:文本框中输入年龄,需要转换成基本数据类型才能进行判断。
    
     2.1 静态转换方法:
     基本数据类型 变量名 = 基本数据类型包装类.parse基本数据类型包装类(String str)
     static int parseInt(String str),也可以转换成其他类型。必须传入对应格式的字符串,例如,Integer.parseInt("a123");运行失败。
     int num = Integer.parseInt("123"); 
boolean b = Boolean.parseBoolean(“true”);
double b = Double.parseDouble(“3.14”);
static char toUpperCase(char ch);直接将字符变成大写。
 
2.2 对象调用(动态)方法:构造函数+转换函数
Integer i = new Integer(“123”); int num = i.intValue();利用字符串可以构成对象的特点,将字符串转换成整数。
        
   十进制转成其他进制字符串:返回字符串
         toBinaryString();转二进制
         toOctalString();转八进制
         toHexString();转十六进制                                      
   其他进制转成十进制:
         static int parseInt(String s, int index);第二个参数代表进制,将某个进制的某个字符串转成十进制的基本数据。例如,Integer.parseInt("110",2);将二进制的110转成十进制。注意:字符串必须和进制保持一致,不能越位。
 
   JDK1.5版本后出现的新特性
   自动装箱,可以直接将基本数据类型封装成对象,例如,Integer x = 4;4是对象,等同于new Integer(4);,隐式运行,简化书写。x可以直接运算,例如,x=x+2;x自动拆箱变成整数,与2运算后,把和自动装箱赋给x。拆箱实质:x.intValue();
    注意,Integer x = null;如果x为空,不可以调用方法也就不能自动装箱。需要判断。
     Integer y = 200; Integer x = 200; y!=x;
     Integer y = 100; Integer x = 100; y==x;。x和y同时指向一个对象。
    当数值在byte范围内(-128到127),对于新特性,如果该数值已经存在,则不会开辟新空间。
    int compareTo(Integer anotherInteger)比较对象内的数值大小。小于,返回-1;等于,返回0;大于,返回1。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值