美文网首页
[Java]开发安卓,你得掌握的Java知识8——StringB

[Java]开发安卓,你得掌握的Java知识8——StringB

作者: 入梦瞌睡 | 来源:发表于2019-08-13 20:08 被阅读0次

    0.前言

    1.本文主要内容简介

    • String类与StringBuilder的基础概念

    • String类与StringBuilder的常用方法

    2.基础知识讲解

    2.1不可变字符串类——String

    • String实际上就是一个字符数组

    • 一旦String类的对象被常量字符串赋值,该字符串便无法改变
      (注意,是字符串无法改变,不是这个String对象的值无法改变)

    String str = "abc";
    str = "edf";
    
    • 注意,这里看似可变,实际上是改变了str所指向的存储空间
      “abc”已经不能被改变了
    • 可以理解为,str存储的是字符数组的首地址
    =================================分割线==================================
    
    • “==”所比较的实际是两个对象是否一样,这里就是在比较两个String变量是否指向同一个地址。
    String str1 = "abc";
    String str2 = "abc";
    System.out.prinln(str1==str2);
    

    输出为:
    true

    • 结果表明:
      只要字符串常量一模一样,那么不同的变量就会共享这一个字符串常量
      (即会指向同一个内存空间)
    =================================分割线==================================
    
    • 可以使用字节数组byte[]来创建字符串,具体思路就是:
      定义一个字节数组,并将其组作为构造函数的参数
    • 另外,字符数组同理可以创建字符串
    byte[] name = {'a','b','c'};
    String str4 = new String(name);
    System.out.println(str4);
    
    char[] name2 = {'你','好','啊'};
    String str5 = new String(name2);
    System.out.println(str5);
    

    输出为:
    abc
    你好啊

    =================================分割线==================================
    
    String类的方法 具体作用
    charAt(i) 获取字符串中的一个字符(i为索引值)
    compareTo(str) 两个字符串的比较,返回值为0是表示相同
    concat(str) 连接两个字符串,返回合出来的字符串
    contains(str) 判断一个字符串是否包含另外一个字符串
    endsWith(str) 判断是否以某个字符串结尾
    startsWith(str) 判断是否以某个字符串开头
    startsWith(str,i) 判断是否以某个字符串开头,i表示从第i个开始算
    equals(str) 两个字符串进行比较(比较字符串内容而非地址)
    indexOf(str) 子字符串在另外一个字符串里的位置(不存在返回-1)
    length 获取字符串的长度
    substring(i) 获取子字符串,从i到结尾(i为索引值)
    substring(a,b) 获取子字符串,从a到b(a,b为索引值)
    toCharArray 将字符串转化为字符数组
    toLowerCase 将所有字符转化为小写
    toUpperCase 将所有字符转化为大写
    trim() 将字符串前面和后面的空格字符删除
    =================================分割线==================================
    

    2.2可变字符串类 StringBuilder与StringBuffer

    • StringBuilder与StringBuffer用法区别不大

    • 它们二者的主要区别在于:
      StringBuffer线程安全,但是效率慢
      StringBuilder线程不安全,效率更高

    • 下面我们主要以StringBuilder讲解为主

    =================================分割线==================================
    
    • 先定义一个StringBuilder对象
    StringBuilder sb = new StringBuilder(6);
    
    • 后面的6表示预先创建好6个空间,让后面的操作效率更高
    =================================分割线==================================
    
    • StringBuilder类中的许多方法与String类的相同
      (上面列举的那些),因此不反复赘述

    • StringBuilder类我们主要关注:增删改插,即:

    append() delete() replace() insert()
    =================================分割线==================================
    
    • 增append()
      即在末尾增加内容,这也是它被称为可变字符串的原因
    StringBuilder sb = new StringBuilder(6);
    sb.append("I");
    sb.append(" Love");
    sb.append(" Android");
    System.out.println(sb);
    

    输出结果:
    I Love Android

    =================================分割线==================================
    
    • 插 insert(i,str)
      即在中间插入内容,i表示插入的位置,str表示插入的字符串
    StringBuilder sb = new StringBuilder(6);
    sb.append("I");
    sb.append(" Love");
    sb.append(" Android");
    sb.insert(2, "also ");
    System.out.println(sb);
    

    输出结果:
    I also Love Android

    =================================分割线==================================
    
    • 改/替换 replace(i , j , str)
      即在替换中间内容,i表示替换的起始位置,j表示替换到哪里,str表示要替换为的字符串
    StringBuilder sb = new StringBuilder(6);
    sb.append("I");
    sb.append(" Love");
    sb.append(" Android");
    
    //这里开始替换
    int start = sb.indexOf("Android");
    int end = start + "Android".length();
    sb.replace(start,end,"you!!!");
    System.out.println(sb);
    

    输出结果:
    I Love you!!!

    • replace的麻烦的地方在于,替换的起始点与终点需要自己计算
    =================================分割线==================================
    
    • 删 delete(i , j)
      即在删除中间内容,i表示删除点的起始位置,j表示删除到哪里
    StringBuilder sb = new StringBuilder(6);
    sb.append("I");
    sb.append(" love");
    sb.append(" Android");
    System.out.println(sb);//删之前
    sb.delete(0,7);//从第0位删到第7位
    System.out.println(sb);//删之后
    

    输出结果:
    I Love Android
    Android

    3.总结

    (1)本文讲解了String类与StringBuilder类的基本知识概念以及常用方法。由于这两个类的方法数量众多,这里就不一一讲解,有需要的可以去
    Java标准版的API规范》这里搜索具体的类及其使用方法
    (2)虽然字符串类的方法都不难,但是想要熟练使用,还是需要多多练习,只有熟练掌握了字符串的使用,后面的Android开发才会更加顺利

    相关文章

      网友评论

          本文标题:[Java]开发安卓,你得掌握的Java知识8——StringB

          本文链接:https://www.haomeiwen.com/subject/pwavjctx.html