2021-07-27第十六天String字符串和Stringbuffer

第十六天

克隆方法

protect Object clone() throws CloneNoSupportedException;创建对象,并返回对象的副本,这个方法回抛出一个异常,throws表示的是可能出现异常,针对调用者必须进行处理.
要实现clone方法,当前某个对象所在的类必须实现标记接口"Cloneable",实现此接口后皆可以使用Object的clone()方法.

Scanner类 文本扫描器

Scnner是一个文本扫描器类,它的形参是一个抽象类,它通过本地的方法进行实现()而非Java语言).
Scanner类提供了判断功能,用来防止输入的类型和结果类型不相互匹配.

public boolean hasNextxxx();判断下一个录入的信息是否是指定的xxx类型.
具体操作格式如下

public class ScannerDemo {
    public static void main(String[] args) {

        //创建键盘录入对象
        InputStream inputStream = System.in ;  //标准输入流  IO(Input 读 ,Output 写)  :Java高级特性:IO

        Scanner sc = new Scanner(inputStream) ;// public Scanner(InputStream source) :创建一个文本扫描器

        System.out.println("请您输入一个数据:");

        if(sc.hasNextInt()){
            int num = sc.nextInt() ;
            System.out.println("您录入的数据是:"+num);
        }else if(sc.hasNextLine()){
            //录入的字符串
            String line = sc.nextLine() ;
            System.out.println("您录入的数据是:"+line);
        }else{
            System.out.println("您录入的数据和结果类型不匹配...");
        }
        //录入数据
       // int num = sc.nextInt();  //java.util.InputMismatchException
       // System.out.println("您要录入的数据是:"+num);
    }
}

String字符串

String字符串是一个常量一旦被赋值了其值就不能再被更改.
推荐使用

String 变量名 = “xxx”;//xxx就是当前String类的实例.

String内部有许多常用的功能,int length();用来获取字符串的长度.在此特别注意,数组中的length是属性,String中的length是一个方法,他们都是获取字符长度的,在数组中使用的则是size();

String中的构造方法有很多,如:

  1. public String();空参构造,空字符序列
  2. public String(byte[] bytes)使用指定的字符集,将字节数组构成一个字符串.
  3. public String(byte[] bytes,字符集):使用指定的字符集,将字节数组构造成一个字符串.
  4. public String(byte[] bytes,int offset,int length):将指定的部分字节数组转换成字符串,参数1:字节数组对象,参数2:指定的角标值 参数3:指定长度
  5. public String(char[] value):将字符数组构造成一字符串.
  6. public String(char[] value,int offset,int count):将部分字符数组转换成字符串.
  7. public String(String original):构造一个字符串,参数为字符串常量.
public class StringDemo {
    public static void main(String[] args) {
            //测试
        String s = new String() ;
        System.out.println("s:"+s); //String类重写了Object的toString(),
        System.out.println(s.length());
        System.out.println("-------------------------------------------");

        byte[] bytes = {97,98,99,100,101} ;
        // public String(byte[] bytes)
        String s2 = new String(bytes) ;
        System.out.println(s2);
        System.out.println(s2.length());

        System.out.println("-------------------------------------------");
        //public String(byte[] bytes,int offset,int length):
        String s3 = new String(bytes,2,2) ;
        System.out.println(s3);
        System.out.println(s3.length());
        System.out.println("-------------------------------------------");

        //public String(char[] value)
        char[] chs = {'我','爱','高','圆','圆'} ;
        String s4 = new String(chs) ;
        System.out.println(s4);
        System.out.println(s4.length());
        System.out.println("-------------------------------------------");

      //  public String(char[] value,int offset,int count)
        String s5 = new String(chs,1,4) ;
        System.out.println(s5);
        System.out.println(s5.length());

        System.out.println("---------------------------------------------");
        // public String(String original)
        String s6 = new String("hello") ; //创建字符串对象,常量值:hello
        System.out.println(s6);
        String s7 = "hello" ; //推荐的方式
        System.out.println(s7);
    }
}

==链接引用类型时比较的是地址的值,equals默认比较地址值,但是String类重写equals方法后equals比较的就变成了内容是否相同.

String类常用的转换功能:(重点)

  • byte[] getBytes() 用于将字符串转换为字节数组,如果方法为孔灿使用平台默认的编码集进行编码.
  • byte[] getBytes(String charset) 使用指定的字符集进行编码
  • String(byte[] bytes) 使用默认字符集进行编码.
  • String(byte[] bytes,指定字符集) 使用指定字符集进行编码.
  • (特别注意编码跟解码必须要保证字符集统一).
    字符集:

gbk :一个中文两个字节(中国中文编码表)
gb2312:gbk升级版(含义有一个中文字符:中国的中文编码表)
iso-8859-1:拉丁文码表
utf-8:任何的浏览器—>都支持 utf-8格式 (后期统一个)
unicode:国际编码表
JS:*际 电脑系统 一个字符集

Arrays

静态功能:
public static String toString(int/byte/float/double…[] a):将任意类型的数组---->String
public char[] toCharArray():将字符串转换成字符数组
public String toString():返回自己本身—“当前字符串的内容”
public String toUpperCase():将字符串转换成大写
public String toLowerCase():将字符串转换成小写

String类的判断

public boolean equals(Object anObject):比较两个字符的内容是否相同 (区分大小写)
public boolean equalsIgnoreCase(String anotherString):比较两个字符串是否相同(不区分大小写)
public boolean startsWith(String prefix):判断字符串是否以指定的内容开头
public boolean endsWith(String suffix):判断字符串是否以指定的内容结尾
需求:在某个时间点(今天下午18:00 将某个目录下的所有的以.java文件结尾删除)
Java中定时器类:Timer---->定时任务TimerTask(抽象类)
表示文件或者文件夹的抽象路径形式:File类
递归删除 (定义方法删除)
boolean isEmpty() 判断字符串是否为空 :若为空,则返回true;否则返回false

String类的获取功能

int length():获取字符串长度
public char charAt(int index);获取指定索引处的字符
public String concat(String str):将指定的字符串和当前字符串进行拼接,获取一个新的字符串
public int indexOf(int ch):返回指定字符第一次出现的索引值
public int lastIndexOf(int ch):返回值指定字符最后一次出现的索引值
public String[] split(String regex):
拆分功能:通过指定的格式将字符串—拆分字符串数组
public String substring(int beginIndex) :从指定位置开始默认截取到末尾
角标从0开始
public String substring(int beginIndex,int endIndex)
从指定位置开始,截取到位置结束(包前不包右)
只能取到endIndex-1处
public static String valueOf(boolean/int/long/float/double/char…Object b)
万能方法,将任意类型转换String类型

String类的其他功能

public String replace(char target,char replacement):替换功能
将指定的内容使用target字符进行替换
public String replaceAll(String regex, String replacement) :
将指定的和参数1正则表达式匹配的字符串 使用replacement进行替换
参数1:
[0-9] —>如果字符是数字字符
参数2: "*"替换掉
public String trim():去除字符串两端的空格
重点
public int compareTo(String anotherString):按照字典顺序比较,返回值是int

StringBuffer

StringBuffer是字符串缓冲区,它有点类似String,但是最大不同的一点是它是可变的字符序列.
它是线程安全的,线程是依赖于进程存在的,进程是能够被系统资源调用的独立单位.它是线程同步的,也因此执行效率较低.StringBuilder和StringBuffer有着相互兼容的API(Application Programming Interface应用程序接口),但是StringBuffer是不同步,在效率更高的同时弱点就是它的线程不安全.
StringBuffer的构造方法是:

public StringBuffer() :空参构造,创建一个空字符序列的字符串缓冲去 (推荐)
public StringBuffer(int capacity):构造一个字符串缓冲区对象,指定容量大小
public StringBuffer(String str):指定字符序列,长度加上初始容量16(总容量)

StringBuffer同时也具有获取功能:

public int length():获取字符数(长度)
public int capacity():获取字符串缓冲区容量

上一篇:StringBuffer的使用


下一篇:Java学习7:String类、StringBuffer类、StringBuilder类的应用学习及源码分析