zoukankan      html  css  js  c++  java
  • 13.String

    String的使用
    String:字符串,使用一对""引起来表示
    1.String 声明为final,不可被继承
    2.String实现了Serializable接口:表示字符串支持序列化的。
    实现了Comparable接口:表示字符串可以比较大小
    3.String内部定义了final char[] value用于存储字符串中数据
    4.String:代表不可变得字符序列。简称:不可变性
    体现:1.当字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值
    2.当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能在原有的value上赋值
    3.当调用String的replace()方法修改字符或字符串时,也需要重新指定内存区域赋值
    5.通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中
    6.字符串常量池中是不会存储相同内容的字符串的

    String的实例化
    方式一:通过字面量定义的方式: 数据声明在方法区中的字符串常量池中
    方式二:通过new + 构造器的方式: 变量保存的地址值,是数据在堆空间中开辟空间以后对应的地址值

    结论
    1.常量与常量的拼接结果在常量池。且常量池中不会出现相同内容的常量
    2.只要其中有一个是变量,结果就在堆中
    3.如果拼接的结果调用intern()方法,返回值就在常量池中

    String中方法
    int length():返回字符串的长度
    char charAt(int index):返回某索引处的字符
    boolean isEmpty():判断是否为空字符串
    String toLowerCase():将所有字符转换成小写字符
    String toUpperCase():将所有字符转换成大写字符
    String trim():返回字符串的副本,忽略前导空白和尾部空白
    boolean equals(Object obj):比较字符串的内容分是否相同
    boolean equalsIgnoreCase(String anotherString):忽略大小写,比较字符串的内容是否相同
    String concat(String str):将指定字符串连接到此字符串的尾部,相当于+
    int compareTo(String anotherString):比较两个字符串的大小
    String substring(int beginIndex):返回一个新的字符串,它是从beginIndex开始截取
    String substring(int beginIndex,int endIndex):返回一个新的字符串,他是从beginIndex开始截取,到endIndex但不包含endIndex位置上的字符

    boolean endWith(String suffix):判断字符是否以指定字符结束
    boolean startsWith(String prefix):判断字符是否以指定字符开始
    boolean StartsWith(String prefix,int toffset):判断字符串从指定索引开始是否以指定字符开始

    boolean contains(CharSequence s):判断字符串是否包含指定字符串
    int indexOf(String str):返回指定子字符串在此字符串首次出现的位置
    int indexOf(String str,int fromIndex):从指定的索引开始,返回指定子字符串在此字符串首次出现的位置
    int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引
    int lastIndexOf(String str,int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
    替换
    String replace(char oldChar,char newChar):
    String replace(CharSequence target,CharSequence replacement)
    String replaceAll(String regex,String replacement)
    String replaceFirst(String regex,String replacement)

    匹配
    boolean matches(String regex)

    切片
    String[] split(String regex)
    String[] split(String regex,int limit)

    String与char[]之间转换
    String-->char[]: Char[] charArray = str.toCharArray();
    char[]-->String:调用String构造器:String str = new String(arr);

    String与byte[]之间的转换
    String-->byte[]:调用String的getBytes()
    byte[]-->String:调用String构造器

    关于StringBuffer和StringBuilder的使用


    String、StringBuffer、StringBuilder三者区别
    String:不可变的字符序列;底层使用char[]存储
    StringBuffer:可变的字符序列;线程安全,效率低:底层使用char[]存储
    StringBuilder:可变的字符序列;线程不安全,效率高:底层使用char[]存储

    源码分析:
    String str = new String();//new char[0]
    String str1 = new String("abc");//new char[]{'a','b','c'}

    StringBuffer sb1 = new StringBuffer();//new char[16]
    StringBuffer sb1 = new StringBuffer("abc")//new char[sb1.length+16]

    如果要添加的数据底层数组盛不下了,那就需要寇蓉底层的数组:默认情况下,扩容为原来容量的2倍+2,同时将原有数组中的数据复制到新数组中

    开发中建议使用:StringBuffer(int capacity)或StringBuilder(int capacity)
    指定底层数组容量

    StringBuffer和StringBuilder方法(StringBuilder与StringBuffer方法类似)
    StringBuffer append(xxx):提供了很多的append()方法,用于字符串的拼接
    StringBuffer delete(int start,int end):删除指定位置的内容
    StringBuffer replace(int start,int end,String str):从指定的位置开始到指定的位置结束,替换成新的字符串
    StringBuffer insert(int offset,xxx):在指定位置插入新的字符串
    StringBuffer reverse(),把当前字符序列逆转

    public int indexOf(String str):返回指定索引的子字符串
    public String substring(int start,int end):返回一个从start开始到end结束的左闭右开的子字符串
    public int length()
    public char charAt(int n)
    public void setCharAt(int n,char ch)

    总结:
    增:append
    删:delete
    改:setCharAt(int n,char ch)修改一个字符/replace(int start,int end,String str)修改子字符串
    查:CharAt(int n)
    插:insert(int offset,xxx)
    长度:length
    遍历: for()+charAt()/toString()

    时间API
    1.java.lang.Systerm
    称为时间戳:public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差

    2.java.util.Date类
    子类---java.sql.Date类

    util下的Date:
    ①两个构造器的使用
    Date():创建一个对应当前时间的Date对象
    Date(时间戳):创建指定毫秒数的Date对象


    ②两个方法的使用
    >toString():显示当前的年、月、日、时、分、秒
    >getTime():获取当前Date对象对应的时间戳(毫秒数)

    sql下的Date:对应着数据库中的日期类型的变量
    >实例化
    java.sql.Date date = new java.sql.Date(时间戳)
    >sql.Date--->util.Date 直接转(多态)
    >util.Date--->sql.Date
    Date date1 = new Date();
    java.sql.Date date2 = new java.sql.Date(date1.getTime())

    3.SimpleDateFormat:对日期类Date的格式化和解析
    3.1:两个操作
    格式化:日期--->字符串
    解析:字符串--->日期

    3.2 SimpleDateFormat的实例化

    使用默认格式的构造器
    SimpleDateFormat sdf = new SimpleDateFormat();
    Date date = new Date()
    String formate = sdf.format(date);//格式化

    String str= “19-12-18 上午11:43”
    Date date1 = sdf.parse(str)


    4.calendar日历类
    4.1抽象类
    4.2 实例化:
    方式一:创建其子类对象(GregorianCalendar)的对象
    方式二:调用其静态方法:getInstance()
    Calendar calendar = Calendar.getInstance();
    4.3常用方法:
    get():
    int days = calendar.get(Calendar.DAY_OF_MONTH):当前日期是该月的第多少天
    set:
    add
    getTime
    setTime

    JDK1.8之后时间
    LocalDate、LocalTime、LocalDateTime
    1.now():获取当前的日期、时间、日期+时间
    如:LocalDate localdate = LocalDate.now()

    对多个对象进行比较大小、排序:使用两个接口comparable、comparator
    一:comparable接口的使用:
    1.像String、包装类等实现了comparable接口,重写了compareTo()方法,给出了比较两个对象大小的方法
    2.重写compareTo(obj)的规则:
    如果当前对象this大于形参对象obj,则返回正整数
    如果当前对象this小于形参对象obj,则返回负整数
    如果当前对象this等于形参对象obj,则返回零
    3.对于自定义类来说,如果需要排序,可以让自定义类实现comparable接口,重写compareTo(),并指明如何排序

    二、comparator接口的使用
    重写compare(Object obj1,Object obj2)方法
    如果返回正整数,obj1大
    如果返回负整数,obj1小
    如果返回0,obj1,obj2 大小相等

    comparable与comparator比较
    comparable接口的方式一旦一定,保证comparable接口实现类的对象在任何位置都可以比较大小
    comparator接口属于临时性的比较(匿名对象)
     
  • 相关阅读:
    linux ------ 使用 TFTP 在两个主机之前传输文件
    linux c 编程 ------ 串口编程
    Qt error ------ qRegisterMetaType() 跨线程信号与槽的形参携带
    Qt error ------ 'XXX' has not been declared
    Qt ------ 自定义QVector<T>中的T
    Qt ------ WAV 音频文件介绍
    short、int、long、float、double区别
    tinyint、smallint、bigint、int 区别
    String、StringBuffer与StringBuilder的区别
    equals与hashcode区别
  • 原文地址:https://www.cnblogs.com/sun1997/p/13258186.html
Copyright © 2011-2022 走看看