Day14-String类-2019-04-09

String类

public final class String
概述:String 类代表字符串。所有字符串字面值(如 "abc" )都作为此类的对象。
     字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为String对象是不可变的,所以是
线程安全的。 String类中会重写equals方法(改为值相等)

线程安全:同步,只能一个人进行操作,效率低
线程不安全:异步,同时多个人操作,效率高
对于不可变的对象,它本身就是线程安全的,不需要同步机制去保证
     底层使用字符数组实现的,一旦创建就不能更改

        private final char value[];

构造方法:
    public String()                // String重写了toString方法
    public String(byte[] bytes)    // byte数组转化一个字符串
    public String(byte[] bytes,int offset,int length)    // offset偏移量
    public String(char[] value)    // 将一个字符数组转化为字符串
    public String(char[] value,int offset,int count)    // 带偏移量的转换
    public String(String original)
    String s = "abc"; // 通常用这种方法为字符串赋值
       

String s = “hello”; s += “world”;
字符串的拼接会创建一个新的对象,所以字符串的拼接不是一个效率很高的操作

面试题:
String s = new String(“hello”)和String s = “hello”;的区别?
    new会创建两个对象,而后者只会在常量池创建一个对象


判断功能:
    boolean equals(Object obj)            // 判断两字符串是否相等
    boolean equalsIgnoreCase(String str)  // 判断两字符串是否相等(忽略大小写)
    boolean contains(String str)          // 判断大串中是否包含小串
    boolean startsWith(String str)        // 判断是否以某字符串开头
    boolean endsWith(String str)          // 判断是否以某字符串结尾
    boolean isEmpty()                     // 判断是否是空串

获取功能:
    int length()                           // 返回数组的长度
    char charAt(int index)                 // 返回字符数组的索引
    int indexOf(int ch)                    // 返回查找字符的索引
    int indexOf(String str)                // 返回查找字符串的索引
    int indexOf(int ch,int fromIndex)      // 从指定位置开始,返回查找字符的索引
    int indexOf(String str,int fromIndex)  // 从指定位置开始,返回查找字符串的索引
    String substring(int start)            // 从指定位置截取子串, 包含起始位置
    String substring(int start,int end)    // 从指定位置截取子串, 包左不包右

转换功能:
    byte[] getBytes()                  // 将此字符串转换并存入byte数组
    char[] toCharArray()               // 将此字符串转换为一个新的字符数组
    static String valueOf(char[] chs)  // 返回 char数组 参数的字符串表示形式
    static String valueOf(int i)       // 返回 int 参数的字符串表示形式
    String toLowerCase()               // 将字符串转换为小写字母
    String toUpperCase()               // 将字符串转换为大写字母
    String concat(String str)          // concatenate拼接字符串

替换功能
    String replace(char old,char new)        // 将所有的old字符转化为new字符
    String replace(String old,String new)    // 将所有的old字符串转化为new字符串,不需要长度相等
    String trim()                            // 去除字符串两侧空格

按字典顺序比较两个字符串
int compareTo(String str)
int compareToIgnoreCase(String str)

 return len1 - len2(底层实现)
Comparable 接口:实现该接口的类具有比较功能
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
如果返回值时负整数, 说明该字符串小于str,返回值是0, 说明该字符串与str相等,大于0,说明该字符串大于str


StringBuffer、StringBulider类

StringBuffer:
    线程安全的可变字符序列.
构造方法:
    public StringBuffer()
    public StringBuffer(int capacity)
    public StringBuffer(String str)

    length: 长度,实际值
    capacity: 容量,理论值

添加功能
    public StringBuffer append(String str)               // 在末尾进行添加
    public StringBuffer insert(int offset,String str)    // 在偏移量的位置,进行插入,其他会挤向后面

删除功能
    public StringBuffer deleteCharAt(int index)
    public StringBuffer delete(int start,int end)       // 包左不包右

替换功能
    public StringBuffer replace(int start,int end,String str) // 包左不包右

反转功能     
    public StringBuffer reverse()

截取功能
    public String substring(int start)
    public String substring(int start,int end)
    注意事项:返回值是String类型, 本身没有改变, 不是在原对象上进行修改

返回值都是StringBuffer类,可以很好的进行链式编程

StringBuild:
    一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步.
    该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
    如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。

String,StringBuffer,StringBuilder的区别
    String: 不可变的字符序列
    StringBuffer: 可变的字符序列,线程安全,效率低
    StringBuilder: 可变的字符序列,线程不安全,效率高

StringBuffer和数组的区别:
    a. StringBuffer和数组都可以当做容器
    b. StringBuffer可以存任意数据类型,但是都会把它们转换成字符序列,数组只能存同种数据类型;
    c. StringBuffer可以自动扩容,数组的容量是固定的

String 和 StringBuffer互换:
    String --> StringBuffer()
        1. StringBuffer(String s)          // 构造方法
        2. new StringBuffer().append(s)    // 新建一个对象并用append拼接

    StringBuffer --> String
        1. subString(0)                   // 调用截取方法
        2. toString()                     // 调用toString方法
        3. String(StringBuffer stb)       // 构造方法

Date、DateFormat类

概述:
    类Date表示特定的瞬间,精确到毫秒。
    JDK1.1前它允许把日期解释为年、月、日、小时、分钟和秒值。它也允许格式化和解析日期字符串

构造方法:
    Date(): 表示创建该对象的时刻
    Date(long date):
       以表示自从标准基准时间(称为“历元(epoch)”,即 1970 年 1 月 1 日 00:00:00 GMT) 以来的指定毫秒数

成员方法
        public long getTime()  // 返回自"epoch"以来此 Date 对象表示的毫秒数。
        public void setTime(long time)

long和Date的互换
    long --> Date
        new Date(long time)
        new Date().setTime(long time)
    Date --> long
        date.getTime();

DateFormat:
    DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间。
    日期/时间格式化子类(如 SimpleDateFormat)允许进行格式化(也就是日期 -> 文本)、解析(文本-> 日期)和标准化

格式化: Date --> String
     String format(Date date)

解析: String --> Date
     Date parse(String source)

SimpleDateFormat:
        构造方法:
        SimpleDateFormat()
          用默认的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
        SimpleDateFormat(String pattern)
          用给定的模式和默认语言环境的日期格式符号构造 SimpleDateFormat。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容