String字符串的常用方法

一、String 的含义

String 是定义一个字符串对象(内存中的字符串都是一个对象。)

String 一旦被初始化就不能被改变(可以改变变量指向,但是不能改变对象内容)

定义方式: String s1 = “abc”; //在内存中存在一个对象。

String s2 = new String("abc");//在内存中存在两个对象。

String s3 = "abc";

比较: s1 == s2 为false

s1 == s3 为true (相同的字符串在静态池中一旦存在,就不会再产生新的该字符串了,以后其再出现,都使用它)

String的equals方法: s1.equals(s2) == true;

二、字符串的常见方法

1、获取

1.1、字符串中包含的字符数(也就是字符串的长度)

int length(); (注意与数组中的length做区别,数组中为属性,字符串中为方法)

1.2、某一个角标位置上的字符

char charAt(int index); (当访问的角标不存在时,提示字符串角标越界异常)

1.3、根据字符获取该字符在字符串中的角标位置

int indexOf(int ch); 返回的是字符第一次出现的角标位置。

int indexOf(int ch,int fromIndex); 返回的是从fromIndex开始字符出现的角标位置。

int indexOf(String str); 返回的是字符串第一次出现的角标位置。

int indexOf(String str,int fromIndex); 返回的是从fromIndex开始字符串 出现的角标位置。

(当访问的字符 或 字符串不存在时,返回 -1)

int lastIndexOf(int ch): 反向索引(种类和解释与正向索引相同 )

注:反向索引只是从右向左索引找到第一次出现目标的角标位置, 返回的依然是角标位置。

2、判断

2.1、判断字符串中是否包含指定字符串

booleancontains(CharSequence s) :CharSequence:为String实现的接口 

特殊之处:indexOf(String str):可以索引字符串str第一次出现的位置,如果返回 -1,则表示该str不在字符串内。

所以,也可以用于对指定字符串判断是否包含。

if(str1.indexOf(“aaa”) == -1)

而且该方法既可以判断,由能获取位置。

2.2、判断字符串是否有内容

booleanisEmpty() :当且仅当长度为0时返回true。

2.3、判断字符串是否以某某开头

booleanstartsWith(String prefix) 

2.4、判断字符串是否以某某结尾

booleanendsWith(String suffix) 

2.5、判断字符串的内容是否相同

booleanequals(Object anObject) (复写了Object 类中的equals方法)

2.5、判断字符串的内容是否相同,(不考虑大小写)

booleanequalsIgnoreCase(String anotherString)

3、转换。

3.1、 将字符数组转换成字符串

构造函数: String(char[] value)

String(char[] value, int offset, int count): 将数组中从下标offset开始,一共count位字符转换成字符串。

静态方法: static StringcopyValueOf(char[] data) 

static StringcopyValueOf(char[] data, int offset, int count) 

static StringvalueOf(char[] data) 

3.2、 将字符串转换成字符数组

char[]toCharArray() 

3.3、 将字节数组转换成字符串

String(byte[] value)

String(byte[] value, int offset, int count): 将数组中从下标offset开始,一共count位字符转换成字符串。

其他方法参见 3.5。

3.4、 将字符串转换成字节数组

byte[]getBytes(String charsetName) 

3.5、 将基本数据类型转换成字符串

static StringvalueOf(boolean b) 

static StringvalueOf(char c) 

static StringvalueOf(char[] data) 

static StringvalueOf(double d) 等等。

注意:字符串和字节数组在转换过程中是可以指定编码表的。

4、替换

Stringreplace(char oldChar, char newChar) : 返回一个数组,它是用newChar 替换就数组中的oldchar等到的。(一个一个的替换)

Stringreplace(CharSequence target, CharSequence replacement) : 后替前,用新串替换原串中的子串。

注:原字符串没有改变,只是新出现了一个替换后的字符串(字符串一旦初始化,不能改变)

如果要替换的字符没有,还是返回原串,不会生成新的字符串。

5、切割,分割

String[]split(String regex) : 指定其中某一个字符或字符串,以其下刀,切割字符串(其实应当依据正则表达式规则拆分)

6、子串:(获取一个字符串的一部分)

Stringsubstring(int beginIndex) //从指定下标位置到结尾。

Stringsubstring(int beginIndex, int endIndex) //从指定下标位置到结束下标位置前一个

7、转换、去除空格、比较

7.1:将字符串转换成大写或者小写。

StringtoUpperCase() 

StringtoLowerCase() 

7.2:将字符串两端多余的空额去除。

Stringtrim() 

7.3:将两个字符串进行自然顺序的比较。

intcompareTo(String anotherString) 

intcompareToIgnoreCase(String str) :不考虑大小写。

从第一位开始比较,比参数大返回正数,比参数小返回负数,都相等返回参数为0:一旦在某一位上分出大小了,便不再向后比较。

三、StringBuffer

定义:字符串缓冲区, 为一个容器。

特点:

1、长度可变化。

2、可以直接操作多个数据类型。

3、最终通过toString方法返回一个字符串。

c: create u: update r:read d: delete

1、存储

StringBuffer append():将指定数据作为参数添加到已有数据的结尾处。

注:在StringBuffer对象调用appeed方法后,返回的就是其本身。

StringBuffer insert(int offset, 基本数据 b) : 从offest下标位开始插入 基本数据类型、字符串或者数组 b。

注:在StringBuffer对象调用insert方法后,返回的就是其本身。

2、删除

StringBuffer delete(int start, int end) : 移除下标start到 end-1的字符。

注:在StringBuffer对象调用delete方法后,返回的就是其本身。

StringBufferdeleteCharAt(int index) : 移除此序列指定下标位置的字符(char)。

注:在StringBuffer对象调用deleteCharAt方法后,返回的就是其本身。

清空缓冲区: sb.delate(0,sb.length());

3、获取

charcharAt(int index) 返回此序列中指定索引处的 char 值。

intindexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。

intindexOf(String str, int fromIndex) 从指定的索引处开始,返回第一次出现的指定子字符串在该字符串中的索引。

intlastIndexOf(String str) 返回最右边出现的指定子字符串在此字符串中的索引。

intlastIndexOf(String str, int fromIndex) 返回最后一次出现的指定子字符串在此字符串中的索引。

Stringsubstring(int start) 返回一个新的 String,它包含此字符序列当前所包含的字符子序列。

Stringsubstring(int start, int end) 返回一个新的 String,它包含此序列当前所包含的字符子序列。

注意:这里返回的是String,不StringBuffer。

String toString():放回当前缓存区字符串。

int length(): 返回字符数。

4、修改

StringBufferreplace(int start, int end, String str) 在start和end之间,用str替换

voidsetCharAt(int index, char ch) 在index下标位置使用 字符dh替换原字符

5、反转

StringBufferreverse() 

6、

voidgetChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 

将缓冲区中的指定数据存到指定的字符数组中,从指定位置开始存。

四、StringBuilder

在jdk 1.5之后新加功能

其余StringBuffer功能一样。

与StringBuffer的区别:

StringBuffer是线程同步的。

StringBuilder是线程不同步的。

当是单个线程操作缓冲区时,建议使用 StringBuilder 其有更高的效率。 

五、jdk版本升级的三因素

1、提高安全性

2、提高效率

3、简化书写

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

推荐阅读更多精彩内容