String类

一、string类内部结构

string类为final的不可继承,并且有一个char型数组属性也是final的(char value[]),代表不可变的字符序列

string实现了comparable、serializable和charsequence接口(因此字符串可以比较)

字符串是值传递不是引用传递

sring有两种创建方法

1.new 这时候创建的string对象在堆空间中,但是string的value属性还是要指向方法区的常量池。

2.直接赋字面量,这时候在栈里的指针直接指向常量池。

关于常量池:

常量池在方法区里,顾名思义,里面的量不可变,改变String其实是在常量池新建一个量(就算拼接也是重新在常量池造一个)

常量池不重复,也就是两个string值相同的话其实指向常量池里同一个char数组。

如果字符串拼接调用的是intern方法,返回值在常量池里。

两个字符串拼接,如果其中一个是变量(不是字面量,如果变量用final修饰就不是变量是常量了那还在常量池里),则返回结果在堆中(也就是s1+“a”其实在堆中,再指向常量池)



堆里再指向常量池

二、常用方法

1. int length()

2.char charAt(int)

3.boolean isEmpty()

4.String toLowerCase();String toUpperCase();

5.String trim();裁剪字符串前后的空格

6.boolean equals(Object)区分大小写

7.boolean equalsIgnoreCase(Sting)不区分大小写

8.String concat(String) 相当于+

9.int compareTo(String) 本质是字符串之间的字符逐个相减(ascall码),返回负数就是前面的字符串在字母表上比较前。

10.

String substring(int)从int开始到末尾返回一个新串

String substring(int,int)从int开始到int,[)

12.

boolean endsWith(String suffix)以指定后缀结束

boolean startsWith(String suffix)

boolean startsWith(String suffix,int) 指定int后的子串是不是以suffix开头

13.boolean contains(CharSequence s)其实就传一个string就行(实现了该接口),看是否包含这个串

14.

int indexOf(String str)

int indexOf(String str,int index) 从指定坐标往后找第一个符合的

int lastIndexOf(String str)

int lastIndexOf(String str,int index) 从指定坐标往前找第一个符合的

15.

String replace(char oldChar, char newChar)替换全部单个char

String replace(CharSequence target, CharSequence replacement)替换全部string

 String replaceAll(String regex, String replacement) 用正则表达式替换所有

String replaceFirst(String regex, String replacement) 用正则表达式替换第一个

16.

 boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。

17.

String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。

String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串,最多不超过limit个,如果超过了,剩下的全部都放到最后一个元素中。

三、String和其他数据类型的转换

1.字符串 <=> 基本数据类型和包装类

XXX.parseXXX(String s)

String.valueOf(XXX x)

2.字符串 <=> 字符数组

str.toCharArray()返回一个字符数组

使用String构造器,String(chararr)


public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):提供了将指定索引范围内的字符串存放到数组中的方法。

String(char[],int offset,int length)


3.字符串 <=> 字节数组

str.getBytes()返回一个字节数组

使用String构造器,String(bytearr)


String(byte[],int offset,int length)

getBytes有重载方法,不给参数使用默认编码集,可以给参数指定编码集,如str.getBytes("gbk")(因为编码集可能不存在所以要抛异常)

同样的String(bytearr,"gbk")可以指定解码时也用gbk,不指定就是默认编码集

字符串到字节其实是把看得懂的文字变成看不懂的二进制数据(变成数字a->97这样ASCII码)

gbk专门针对中国,汉字是两个字节;utf-8面向世界,汉字是三个字节;但他们的a都是编码97(和ASCII一样,其他字母或者ASCII里有的同理)

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