图片-小白之家
图片-小白之家
图片-小白之家
图片-小白之家

java.lang.string(用法介绍)

这里咱们将总结字符串相关的知识,除了总结String的API用法,同时咱们还会总结一些相关的知识点,包含字符串常量池、StringBuffer、StringBuilder,以及equals和==的用法。

一、String的用法

String类在java.lang包中,java运用String类创建一个字符串变量,字符串变量属于目标。java把String类声明的final类,不能有子类。String类目标创建后不能修正,由0或多个字符组成,包含在一对双引号之间,下面简略的熟悉一下其常用的API

java.lang.StringcharcharAt(intindex)回来index所指定的字符Stringconcat(Stringstr)将两字符串衔接

booleanendsWith(Stringstr)测验字符串是否以str结束

booleanequals(Objectobj)比较两目标

char[]getBytes将字符串转换成字符数组回来

char[]getBytes(Stringstr)将指定的字符串转成制服数组回来

booleanstartsWith(Stringstr)测验字符串是否以str开端

intlength()回来字符串的长度Stringreplace(charold,charnew)将old用new替代

char[]toCharArray将字符串转换成字符数组StringtoLowerCase()将字符串内的字符改写成小写StringtoUpperCase()将字符串内的字符改写成大写StringvalueOf(Booleanb)将布尔办法b的内容用字符串表明StringvalueOf(charch)将字符ch的内容用字符串表明StringvalueOf(intindex)将数字index的内容用字符串表明StringvalueOf(longl)将长整数字l的内容用字符串表明Stringsubstring(int1,int2)取出字符串内第int1方位到int2的字符串

1.结构办法

//直接初始化Stringstr=”abc”;//运用带参结构办法初始化char[]char={‘a’,’b’,’c’};Stringstr1=newString(“abc”);Stringstr2=newString(str);Stringstr3=newString(char);

2.求字符串长度和某一方位字符

Stringstr=newString(“abcdef”);intstrlength=str.length();//strlength=7charch=str.charAt(4);//ch=e

3.提取子串

用String类的substring办法能够提取字符串中的子串,该办法有两种常用参数:1)publicStringsubstring(intbeginIndex)//该办法从beginIndex方位起,从当时字符串中取出剩下的字符作为一个新的字符串回来。2)publicStringsubstring(intbeginIndex,intendIndex)//该办法从beginIndex方位起,从当时字符串中取出到endIndex-1方位的字符作为一个新的字符串回来。

Stringstr1=newString(“abcdef”);Stringstr2=str1.substring(2);//str2=”cdef”Stringstr3=str1.substring(2,5);//str3=”cde”

4.字符串比较

1)publicintcompareTo(StringanotherString)//该办法是对字符串内容按字典顺序进行巨细比较,经过回来的整数值指明当时字符串与参数字符串的巨细联系。若当时目标比参数大则回来正整数,反之回来负整数,持平回来0。2)publicintcompareToIgnoreCase(StringanotherString)//与compareTo办法相似,但疏忽巨细写。3)publicbooleanequals(ObjectanotherObject)//比较当时字符串和参数字符串,在两个字符串持平的时分回来true,否则回来false。4)publicbooleanequalsIgnoreCase(StringanotherString)//与equals办法相似,但疏忽巨细写。

Stringstr1=newString(“abc”);Stringstr2=newString(“ABC”);inta=str1.compareTo(str2);//a>0intb=str1.compareToIgnoreCase(str2);//b=0booleanc=str1.equals(str2);//c=falsebooleand=str1.equalsIgnoreCase(str2);//d=true
图片[1]-java.lang.string(用法介绍)-小白之家

5.字符串链接

publicStringconcat(Stringstr)//将参数中的字符串str衔接到当时字符串的后面,效果等价于”+”

Stringstr=”aa”.concat(“bb”).concat(“cc”);//适当于Stringstr=”aa”+”bb”+”cc”;

6.字符串中单个字符查找

1)publicintindexOf(intch/Stringstr)//用于查找当时字符串中字符或子串,回来字符或子串在当时字符串中从左边起初次呈现的方位,若没有呈现则回来-1。2)publicintindexOf(intch/Stringstr,intfromIndex)//改办法与第一种相似,差异在于该办法从fromIndex方位向后查找。3)publicintlastIndexOf(intch/Stringstr)//该办法与第一种相似,差异在于该办法从字符串的末尾方位向前查找。4)publicintlastIndexOf(intch/Stringstr,intfromIndex)//该办法与第二种办法相似,差异于该办法从fromIndex方位向前查找。

Stringstr=”Ireallymissyou!”;inta=str.indexOf(‘a’);//a=4intb=str.indexOf(“really”);//b=2intc=str.indexOf(“gg”,2);//c=-1intd=str.lastIndexOf(‘s’);//d=6inte=str.lastIndexOf(‘s’,7);//e=7

7.巨细写转换

1)publicStringtoLowerCase()//回来将当时字符串中所有字符转换成小写后的新串2)publicStringtoUpperCase()//回来将当时字符串中所有字符转换成大写后的新串

Stringstr=newString(“abCD”);Stringstr1=str.toLowerCase();//str1=”abcd”Stringstr2=str.toUpperCase();//str2=”ABCD”

8.字符串中字符的替换

1)publicStringreplace(charoldChar,charnewChar)//用字符newChar替换当时字符串中所有的oldChar字符,并回来一个新的字符串。2)publicStringreplaceFirst(Stringregex,Stringreplacement)//该办法用字符replacement的内容替换当时字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串回来。3)publicStringreplaceAll(Stringregex,Stringreplacement)//该办法用字符replacement的内容替换当时字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串回来。

Stringstr=”asdzxcasd”;Stringstr1=str.replace(‘a’,’g’);//str1=”gsdzxcgsd”Stringstr2=str.replace(“asd”,”fgh”);//str2=”fghzxcfgh”Stringstr3=str.replaceFirst(“asd”,”fgh”);//str3=”fghzxcasd”Stringstr4=str.replaceAll(“asd”,”fgh”);//str4=”fghzxcfgh”

9.其他办法

1)Stringtrim()//截去字符串两头的空格,但关于中间的空格不处理。

Stringstr=”abc”;

Stringstr1=str.trim();inta=str.length();//a=6intb=str1.length();//b=4

2)booleanstatWith(Stringprefix)或booleanendWith(Stringsuffix)//用来比较当时字符串的开端字符或子字符串prefix和终止字符或子字符串suffix是否和当时字符串相同,重载办法中同时还能够指定比较的开端方位offset。

Stringstr=”abcdef”;booleana=str.statWith(“ab”);//a=truebooleanb=str.endWith(“ef”);//b=true

3)contains(Stringstr)//判断参数s是否被包含在字符串中,并回来一个布尔类型的值。

Stringstr=”abcdef”;

str.contains(“ab”);//truestr.contains(“gh”);//false

4)String[]split(Stringstr)//将str作为分隔符进行字符串分解,分解后的字字符串在字符串数组中回来。

Stringstr=”abcdefghi”;

String[]str1=str.split(“”);//str1[0]=”abc”;str1[1]=”def”;str1[2]=”ghi”;

10.类型转换

字符串转根本类型java.lang包中有Byte、Short、Integer、Float、Double类的调用办法:

publicstaticbyteparseByte(Strings)

publicstaticshortparseShort(Strings)

publicstaticshortparseInt(Strings)

publicstaticlongparseLong(Strings)

publicstaticfloatparseFloat(Strings)

publicstaticdoubleparseDouble(Strings)

intn=Integer.parseInt(“12”);floatf=Float.parseFloat(“12.34”);doubled=Double.parseDouble(“1.124″);

根本类型转字符串String类中供给了StringvalueOf()放法,用作根本类型转换为字符串类型

staticStringvalueOf(chardata[])

staticStringvalueOf(chardata[],intoffset,intcount)

staticStringvalueOf(booleanb)

staticStringvalueOf(charc)

staticStringvalueOf(inti)

staticStringvalueOf(longl)

staticStringvalueOf(floatf)

staticStringvalueOf(doubled)

//将char’8’转换为int8Stringstr=String.valueOf(‘8’);

intnum=Integer.parseInt(str);

进制转换运用Long类中的办法得到整数之间的各种进制转换的办法:

Long.toBinaryString(longl)//二进制

Long.toOctalString(longl)//十进制

Long.toHexString(longl)//十六进制

Long.toString(longl,intp)//p作为恣意进制

二、String特性

这一部分介绍String的一些特性,涉及到字符串常量池、String.intern()以及咱们经常遇到的“==”和“equals()”问题。下面咱们将经过不同的比如来解说:

比如1:

Stringa=”HelloWorld!”;Stringb=”HelloWorld!”;Stringc=newString(“HelloWorld!”);Stringd=”Hello”+””+”World!”;System.out.println(a==b);//trueSystem.out.println(a==c);//falseSystem.out.println(a==d);//true

咱们应该理解:

首要String不属于8种根本数据类型,String是一个目标。由于目标的默认值是null,所以String的默认值也是null;但它又是一种特殊的目标,有其它目标没有的一些特性。

在这里,咱们先不谈堆,也不谈栈,只先简略引进常量池这个简略的概念。常量池(constantpool)指的是在编译期被确认,并被保存在已编译的.class文件中的一些数据。它包含了关于类、办法、接口等中的常量,也包含字符串常量。

Java会保证一个字符串常量只需一个复制。由于比如中的a和b都是字符串常量,它们在编译期就被确认了,所以a==b为true;而”Hello”和””以及”World!”也都是字符串常量,当一个字符串由多个字符串常量衔接而成时,它自己肯定也是字符串常量,所以d也相同在编译期就被解析为一个字符串常量,所以d也是常量池中”HelloWorld!”的一个引证。所以咱们得出a==b==d;用newString()创建的字符串不是常量,不能在编译期就确认,所以newString()创建的字符串不放入常量池中,它们有自己的地址空间。

比如2:

Stringa=”HelloWorld”;Stringb=newString(“HelloWorld”);Stringc=”Hello”+newString(“World”);System.out.println(a==b);//falseSystem.out.println(a==c);//falseSystem.out.println(b==c);//false

比如2中a还是常量池中”HelloWorld”的引证,b由于无法在编译期确认,所以是运行时创建的新目标”HelloWorld”的引证,c由于有后半部分newString(“World”)所以也无法在编译期确认,所以也是一个新创建目标”HelloWorld”的引证,理解了这些也就知道为何得出此结果了。**PS:**String.intern():再补充介绍一点:存在于.class文件中的常量池,在运行期被JVM装载,并且能够扩充。String的intern()办法便是扩充常量池的一个办法;当一个String实例str调用intern()办法时,Java查找常量池中是否有相同Unicode的字符串常量,假如有,则回来其的引证,假如没有,则在常量池中增加一个Unicode等于str的字符串并回来它的引证,看例3就清楚了。

比如3:

Stringa=”Hello”;Stringb=newString(“Hello”);Stringc=newString(“Hello”);System.out.println(a==b);//falseSystem.out.println(“**********”);

b.intern();

c=c.intern();//把常量池中”Hello”的引证赋给cSystem.out.println(a==b);//false尽管执行了b.intern()但没有赋值给bSystem.out.println(a==b.intern());//trueSystem.out.println(a==c);//true

比如4:

关于equals()和==:equals()是比较两个目标的值是否持平,这个关于String简略来说便是比较两字符串的Unicode序列是否适当,假如持平回来true;而==是比较两字符串的地址是否相同,也便是是否是同一个字符串的引证。

比如5:

String是不可变的:这一说又要说很多,咱们只需知道String的实例一旦生成就不会再改变了,比如说:Stringstr=”aa”+”bb”+”“+”cc”;便是有4个字符串常量,首要”aa”和”bb”生成了”aabb”存在内存中,后”aabb”又和”“生成”aabb“存在内存中,最后又和生成了”aabbcc”,并把这个字符串的地址赋给了str,便是由于String的“不可变”产生了很多临时变量,这也便是为什么建议用StringBuffer的原因了。

三、StringBuffer和StringBuiler

咱们对String、StringBuffer、StringBuiler先有一个简略的知道。String是不可变字符串,StringBuffer和StringBuilder是长度可变的字符串,差异是前者是线程安全的,后者是线程不安全的,相同后者的功率也会更高。

StringBuffer上的首要操作是append和insert办法,可重载这些办法,以接受恣意类型的数据。每个办法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或刺进到字符串缓冲区中。append办法始终将这些字符增加到缓冲区的末端;而insert办法则在指定的点增加字符。

例如,假如z引证一个当时内容为”start”的字符串缓冲区目标,则此办法调用z.append(“le”)会使字符串缓冲区包含”startle”,而z.insert(4,”le”)将更改字符串缓冲区,使之包含”starlet”。

通常,假如sb引证StringBuilder的一个实例,则sb.append(x)和sb.insert(sb.length(),x)具有相同的效果。

还有delete删去办法deleteCharAt(intindex)delete(intstart,intend),java.lang.string用法介绍,由于发生的是随机数,例8-2每次运行的成果都不会相同。若要发生[a,b]之间的随机数其通式为:

(b-a+1)*Math.random()+a

字符串类

字符串是字符的序列。在Java中,字符串无论是常量还是变量都是用类的目标来完成的。java.lang提供了两种字符串类:String类和StringBuffer类。

1.String类

按照Java言语的规定,String类是immutable的Unicode字符序列,其作用是完成一种不能改动的静态字符串。例如,把两个字符串连接起来的成果是生成一个新的字符串,而不会使本来的字符串改动。实际上,一切改动字符串的成果都是生成新的字符串,而不是改动本来字符串。

字符串与数组的完成很类似,也是经过index编号来指出字符在字符串中的方位的,编号从0开始,第2个字符的编号为1,以此类推。假如要拜访的编号不在合法的范围内,体系会发生StringIndexOutOfBoundsExecption反常。假如index的值不是整数,则会发生编译过错。

String类提供了如表8-2所示的几种字符串创立办法。

表8-2String创立字符串的办法

2.StringBuffer类

String类不能改动字符串目标中的内容,只能经过建立一个新串来完成字符串的改动。假如字符串需求动态改动,就需求用StringBuffer类。StringBuffer类主要用来完成字符串内容的增加、修改、删去,也就是说该类目标实体的内存空间能够主动改动大小,以便于存放一个可变的字符序列。作者:十指波课堂https://www.bilibili.com/read/cv2873488/出处:bilibili

© 版权声明
THE END
喜欢就支持一下吧
点赞0分享
评论 抢沙发

请登录后发表评论

    暂无评论内容

图片-小白之家
图片-小白之家