(14)String类

1…String类

 

1.1…

l      字符串是一个特殊的对象。

l      字符串一旦初始化就不可以被改变。

 

String str = “abc”; 只要是双引号引起来的都是这个Strung类的一个具体对象

 

1.2..

字符串是常量;它们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享。例如:

 

    String str = "abc";

 

字符串在内存里面有个常量池,池里面一个数组,存放abc等这样的字符,字符串由字符组成,比如你建"abc"对象,那么他就把那三个字符存放到这个数组当中,比如建"abf"对象,他会到那常量池中找abf字符拼成一个新的字符串对象

 

 

2…字符串常见方法

String类适用于描述字符串事物。

那么它就提供了多个方法对字符串进行操作。

 

常见的操作有哪些?

"abcd"

 

a,获取。

       1.1字符串中包含的字符数,也就是字符串的长度。

              intlength():获取长度。  注意:数组也有长度,但数组的length是属性没有()..字符串的长度是通过方法完成的有()

       1.2根据位置获取位置上的某个字符。

              charcharAt(int index): 参数是位置

       1.3根据字符获取该字符在字符串中的位置。

              intindexOf(int ch):返回的是ch在字符串中第一次出现的位置。比如有2个a那么就返回第一个a的位置,,参数为什么是int,因为他接收的是ascll码,ch是字符,参数是ascll码,,你可以传97,97就是字符c,他传的是ascll码

              intindexOf(int ch, int fromIndex) :从fromIndex指定位置开始找,获取ch在字符串中出现的位置。

 

              intindexOf(String str):返回的是str在字符串中第一次出现的位置。比如bc在字符串中第一次出现的位置,,从0位置开始找

              intindexOf(String str, int fromIndex) :从fromIndex指定位置开始,获取str在字符串中第一次出现的位置。参考4

 

              intlastIndexOf(int ch) :

 

b.判断

       2.1字符串中是否包含某一个子串。

              booleancontains(str):

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

                            所以,也可以用于对指定字符串的判断是否包含。indexOf和contains都可以做这件事

                            if(str.indexOf("aa")!=-1)就是字符串里面存在aa,字符串包含aa

 

                            而且该方法即可以判断,又可以获取出现的位置。即判断又要拿位置的话就用indexOf,,如果只是判断就用contains

                            

 boolean contains(CharSequence s) 看api,,,CharSequence是个接口,,CharSequence意思是字符序列,CharSequence接口有个实现类是string,,这里的参数不是string的原因是他有另外一个参数StringBuffer,,,CharSequence接口有个实现类是StringBuffer

        当且仅当此字符串包含指定的char 值序列时,返回 true。

 

       2.2字符中是否有内容。字符串里面没有内容就返回true,有内容就返回false,,就是判断字符串是否为空字符串就是里面是空的 " "

              booleanisEmpty(): 原理就是判断长度是否为0. 当且仅当 length() 为 0 时里面没有内容就返回 true。,,,""是而过对象,,null是指向空

       2.3字符串是否是以指定内容开头。

              booleanstartsWith(str);  参考7

       2.4字符串是否是以指定内容结尾。

              booleanendsWith(str);

       2.5判断字符串的内容是否相同。复写了Object类中的equals方法。比较对象里的内容

              booleanequals(str);

       2.6判断内容是否相同,并忽略大小写。  邮箱验证忽略大小写

              booleanequalsIgnoreCase();

 

==:操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

equals:操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。

 

c. 转换

       3.1将字符数组转成字符串。下面3种方法效果一样,一个是构造函数完成,一个是string的copyValueOf方法完成,一个是string的 valueOf方法完成

              构造函数:String(char[])

                              String(char[],offset,count):将字符数组中的一部分转成字符串。

 

              静态方法:

                            staticString copyValueOf(char[]);

                            staticString copyValueOf(char[] data, int offset, int count)

 

                            staticString valueOf(char[]);

 

       3.2将字符串转成字符数组。**

              char[]toCharArray():

 

       3.3将字节数组转成字符串。

                     String(byte[])

                     String(byte[],offset,count):将字节数组中的一部分转成字符串。

 

       3.4将字符串转成字节数组。

                     byte[]  getBytes():

       3.5将基本数据类型转成字符串。 参考3中的代码4,也可以把字符数组转成字符串

              staticString valueOf(int)

              staticString valueOf(double)

 

              特殊:字符串和字节数组在转换过程中,是可以指定编码表的。你想做编码操作的时候你得变成字节才可以,字符不行

 

 

d…替换

 

       Stringreplace(oldchar,newchar);

Stringreplace(char oldChar, char newChar) =

         返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。

 

Stringreplace(CharSequence target, CharSequence replacement)    直接替换整个字符串或者把字符串的一部分换成指定的部分,

         

e….切割

       String[]split(regex); 

 

 

f...获取字串

       Stringsubstring(begin);        sub是子的意思

       Stringsubstring(begin,end);

 

 String substring(int beginIndex)               从beginIndex这个位置开始截取成一个新的字符串

         返回一个新的字符串,它是此字符串的一个子字符串。

 String substring(int beginIndex, int endIndex)        从beginIndex这个位置开始到endIndex-1位置结束截取

         返回一个新字符串,它是此字符串的一个子字符串。

 

g….转换,去除空格,比较。

       7.1将字符串转成大写或则小写。 参考代码1

               String toUpperCase();

               String toLowerCase();

 

       7.2将字符串两端的多个空格去除。邮箱登陆用到去除空格  参考代码2

              Stringtrim();

 

       7.3对两个字符串进行自然顺序的比较,,比较大小。 参考代码3

              intcompareTo(string);

 

 

 

2…StringBuffer

 

StringBuffer用于对字符串进行修改,他是个容器

 

StringBuffer是字符串缓冲区。

 

是一个容器。

特点:

a,长度是可变化的。数组也是个容器,但是长度是固定的

b,可以直接操作多个数据类型。而数组一次只能操作一种数据类型,因为数组的类型是之前指定了的 比如char[] x

c,最终会通过toString方法变成字符串。

 

什么时候使用StringBuffer:当数据类型不确定,而且最终变成string的时候,还有数据的个数也不确定的时候就用它

 

a,存储。

       StringBufferappend():将指定的数据作为参数添加到已有数据结尾处。append()参数包括,char[] str,(char[] str, int offset, int len),(CharSequences),(CharSequence s, int start, int end),(Object obj),(String str),(StringBuffer sb) ,,,这里添加后返回的还是原来的StringBuffer对象,

       StringBufferinsert(index,数据):可以将数据插入到指定index位置。 在指定的位置添加(插入)数据,,返回的还是原来的StringBuffer对象

 

 

b,删除。

       StringBufferdelete(start,end):删除缓冲区中的数据,包含start,不包含end。

       StringBufferdeleteCharAt(index):删除指定位置的字符。

       清空StringBuffer里面所有内容   delete(0, s.length()),,,,StringBuffer也有length()方法

      

c,获取。

       charcharAt(int index)

       intindexOf(String str)       获取字符串在这个StringBuffer第一次出现的位置

       intlastIndexOf(String str)

       intlength()

       Stringsubstring(int start, int end) 这里返回的还是string

 

d,修改。就是替换,,改变原来的数据,不是添加

       StringBufferreplace(start,end,string);  ,把start到end-1的(包括end-1)位置上的数据换成你指定的string内容,,,,返回的还是原来的StringBuffer,,参考代码5

       voidsetCharAt(int index, char ch) ;   index位置上的数据替换成ch,,只替换一个,,返回值是void,,,ch类型不是string的原因是,StringBuffer里面的每一个数据都是char类型的字符,string里面元素也是char类型的,,,

 

 

e,反转。

       StringBufferreverse();

 

f…将缓冲区中的指定数据存储到指定字符数组中。

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

注意:插入数据后,数组的长度不能超过你之前定义的长度,就是你插入数据之后的数组长度不能超过5,否则报错,

 

代码:

StringBuffer sb  = new StringBuffer("abcde");

sb.toString()          把缓冲区变成字符串

 

 

3…StringBuilder

 

 

StringBuffer是线程同步。

StringBuilder是线程不同步。提高效率

 

StringBuilder不安全,StringBuffer安全

 

以后开发,建议使用StringBuilder,,为什么不用安全的,比如一个容器我们在往里面存数据的时候.如果另外一个线程在做其他操作修改删除等等,那么这些数据在启动的时候会错乱那怎么办呢,就是我在操作的时候你不能动,一次只能有一个人执行,这就是同步,StringBuffer就是那么做的他是同步的安全的,

 

选择StringBuilder:如果是单线程程序的情况下StringBuffer效率低,因为他要判断锁,他添加一次要判断那个锁,删除还是要判断那个锁...判断锁很麻烦,StringBuilder不需要判断锁,这样就快捷

 

将StringBuilder 的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer。 就是多线程用StringBuffer,,单线程用StringBuilder,,多线程也可以不用StringBuffer,,就是自己加锁,lock就是同步了

 

 

4…基本数据类型的包装类

 

int有多种表现形式,把一个int的十进制的变成其他进制表现形式,这个转换只有int整数自己最清楚,把整数变成对象以后,对象里面有定义一些功能的话,,那指挥这个整数对象做事情就方便了

 

基本数据类型对象包装类。

 

byte Byte类,引用数据类型

short       short

int          Integer

long Long

boolean Boolean

float Float

double     Double

char Character

 

基本数据类型对象包装类的最常见作用,

就是用于基本数据类型和字符串类型之间做转换

 

基本数据类型转成字符串。

 

       基本数据类型+""   3+""=字符串3

 

static String toString(int i)   把整数变成字符串

         返回一个表示指定整数的String 对象。

 

       基本数据类型.toString(基本数据类型值);

 

       如: Integer.toString(34);//将34整数变成"34";

 

4.2…字符串转成基本数据类

 

xxx a =Xxx.parseXxx(String); 这是一种静态转换方式,   xxx是基本数据类型,Xxx基本数据类型的引用类型,比如 int a =Integer.parseInt("123");

 

static intparseInt(String s)   把字符串转换成int类型

       

4.3…

注意:Character 是没有parseXxx(String); 方法的,因为Character 本身就是字符..字符串中每个元素都是字符,他不需要转

Character类中的方法:

static chartoUpperCase(char ch)

          使用取自 UnicodeData 文件的大小写映射信息将字符参数转换为大写。把一个字母变成大写

 

4.4….

Integer类中的方法:

static introtateRight(int i, int distance)  distance右移的位数

          返回根据指定的位数循环右移指定的 int 值的二进制补码表示形式而得到的值。

 

static StringtoBinaryString(int i)

          以二进制(基数 2)无符号整数形式返回一个整数参数的字符串表示形式。

 

static StringtoHexString(int i)   返回的是字符串,,这个字符串是 i 的十六进制表现形式的字符串

          以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式。

 

static StringtoOctalString(int i) 返回的是字符串,,这个字符串是 i 的八进制表现形式的字符串

          以八进制(基数 8)无符号整数形式返回一个整数参数的字符串表示形式。

 

十进制转成其他进制。

                                                                                              toBinaryString();转为二进制

                                                                                              toHexString();           转为十六进制

                                                                                              toOctalString();         转为八进制

 

其他进制转成十进制。

                                                                                              parseInt(string,radix);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值