黑马程序员---java基础知识(六):string类

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

String类

一、特点:

1、String是一种特殊的数据类型,可创建对象。

2、通过String创建的对象分别可存在于字符串池(StringPool)和堆内存中

3、String是一个final的类型,即不可被继承修改,一经初始化就终生不可改变。(要改变也是改变的引用变量)

4、StringPool中的数据可共享,即两个引用变量可指向同一个字符串池中的字符串

5、Java中的任何对象都可写成字符串的形式。

二、字符串方法:

一)字符串的获取:

       以 String str =  “Hellow java”;为例

1、int length()   --->   length方法返回给定字符串的长度:

      例如:   str.length();//值为11

2、 char charAt(int index)   --->   根据位置获取某个字符串

      例如:   char c = str.charAt(4);//结果为 o 

2、 int indexOf(int ch)   --->   根据字符串获取该字符在字符串中的位置。返回字符串中第一次出现的位置。

      例如:   int x = str.indexOf(‘j’);//结果为7

     int indexOf(int ch,int fromIndex)   --->   从fromIndex指定位置开始。获取在字符串中的位置。

      例如:   int x = str.indexOf("w",3);//结果为5

                   int y = str.indexOf("f",3);//结果为-1,没有找到

注:int indexOf(String str)和int indexOf(String str,int fromIndex)同上,只是接收的是String类型的数据。(方法重载)

当访问到字符串中不存在的角标时,会发生StringIndexOutOfBoundsException的角标越界的错误。如果未找到则返回-1,下同。

3、 int lastIndexOf(int ch)   --->   反向索引一个字符出现的位置,此位置的角标仍为从左数的角标。

     例如:    int m = str.lastIndexOf("v");//结果为9

二)字符串的判断:

     以String str = "StringDemo.java";  String s = "StringDemo.java";为例:

1、 boolean contains(str)   --->   判断字符串中是否包含一个子串

      例如      boolean b1 = str.contains("Demo");//结果为true

2、 boolean isEmpty()   --->   判断字符串中是否有内容,原理就是判断字符串长度是否为0:

      例如      boolean b2 = str.isEmpty();//结果为true

3、 boolean startWith()   --->   判断字符串是否以指定内容开头:

      例如      boolean b3 = str.startWith("String");//结果为true

4、 boolean endWith()   --->   判断字符串是否以指定内容结尾:

      例如      boolean b4 = str.endWith(".java");//结果为true

5、 boolean equals()   --->   判断两个字符串的内容是否相同:

      例如      boolean b5 = str.equals(s);//结果为true

注:判断字符串内容是否相同,是复写了Object类中的equals的方法,是区分大小写的。

6、 boolean equalsIgnoreCase()   --->   判断两个字符串的内容是否相同,忽略大小写:

      例如      boolean b5 = str.equalsIgnoreCase("STRINGdEmo.JAVA");//结果为true

三)字符串的转换:

       例子:char[] arr = {'a','b','c','d','e','f','g','h'};
 String str = "Hello java";

1、将字符数组转化成字符串:

构造函数:String(char[]) 及 String(char[] ch,int offset,int count)

      例如       String s = new String(arr);//结果为:s = abcdefgh

                    String st = new String(arr,1,3);//结果为:st = bcd

2 、char[] toCharArray()   --->   将字符串转化成数组:

      例如       char[] ch = str.toCharArray();//结果为:ch = {'H','e','l','l','o',' ','j','a','v','a'}

3、字符串和字节数组间的转换,同1和2,参数为byte[]型值。

     String(byte[] b);和String(byte[] b,int offset,int count)

     byte[] getByte[]      --->   byte[] b = str.getByte();

4、static String valueOf(3)   --->   (专业写法)将基本数据类型转换成字符串:

      例如       String.valueOf(3);//结果为:"3"

      非专业写法:3+""

四)字符串的“更改”:

       以String s = "     Hello Java    ";为例:

1、String replace(oldchar,newchar)   --->   字符串的替换:

      例如       str.replace("Java","World");//结果为:s1 = "     Hello World    "

                    str.replace('a','n');//结果为:s1 = "     Hello Jnvn    "

注:如果要替换的字符不存在,则返回原串。

2、String toUpperCase() 和 String toLowerCase()   --->   将字符串转为大写或小写:

      例如       str.toUpperCase();//结果为:"     HELLO JAVA    "

                    str.toLowerCase();//结果为:"     hello java    "

3、String trim()   --->   将字符串两端的多个空格去掉:

      例如       str.trim();//结果为:"Hello Java"     

4、String[] split(regex)   --->   字符串的切割:

      以String str = "zhangsan,wangwu,lisi,xiaohei";为例

      例如       String[] s = str.split(",");//结果为:s = {"zhangsan","wangwu","lisi","xiaohei"}

5、int compareTo(String str)   --->   对两个字符进行自然顺序的比较:

      例如       String s1 = "abc";      String s2 = "aaa";

                    int n = s1.compareTo(s2);//结果为:n = 1


五)substring(int a,int b)   --->   获得字符串的子串:

String类的方法substring可以从一个较大的字符串提取出一个子串。

方法的中a和b分别代表获取的字符串的起始位置(从哪个位置开始获取,包含此位置)和终止位置(不包括b),获得s.substring(a,b)的长度是b-a。

      例如       String s = "adflkwefnkl";

                    获取子串--从指定位置到结尾:s.substring(2)//结果为:"flkwefnkl"

                    获取从指定位置到另一位置:  s.substring(2,4));//结果为:"fl"    --->包含头,不包含尾

四、构造字符串

在这里以StringBuilder为例,在穿插着说一下StringBuffer。

1、概述:

       上面也提到了:按键或者来自文件中的单词。采用字符串连接的方式达到此目的的效率是十分低的,每次连接字符串,都会构建一个新的String对象,既降低了效率,又占用大量的空间。通过使用StringBuilder类局可以避免这个问题。另外,在构建字符串时就调用toString方法,可以得到一个String对象。

StringBuilder作为一个容器,是被final修饰的,它是字符串缓冲区,可以对这个“容器”进行“CURD”操作,即存储(creat),修改(update),获取(read),删除(delete)。

这里需要说明的一点是:StringBuilder是在JDK1.5之后才出来的,相对于StringBuffer的效率要高。因为可以不用每次判断锁。虽然不安全,但是效率更高,建议开发使用StringBuilder。StringBuilder和StringBuffer的对比:

----StringBuilder:是线程不同步的,相对效率更高,但是不安全

----StringBuffer:  是线程同步的,相对效率较低,但安全。

2、构建格式:

                    StringBuilder bul = new StringBuilder();

3、特点:

第一、StringBuilder的长度是可变的,也可以通过length()的方法求当前对象的长度。

第二、可以直接操作多个数据类型。可将如int、double、char、boolean等类型的数据作为字符串相连接存入容器中。

第三、最终会通过toString方法变为字符串。


4、StringBuilder的操作方法:

4.1 append()   --->   存储

      StringBuilder append();   --->   如果要在字符串中“添加”一些内容,则可以使用append方法。可以将制定数据作为参数添加到已有数据的结尾处。

注:方法调用连 -----> 一连调用方法,返回的还是对象。如:

       str.append("abc").append(true).append(123).append(20.6);//值为:“abctrue12320.6”

StringBuilder insert(index,数据)   --->   将数据插入到指定index位置

      例如       StringBuilder bul = new StringBuilder("adflkwefnkl");

                    bul.insert(1,"qq");//结果为:"aqqdflkwefnkl"

3.2 delete()   --->   删除

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

      例如       StringBuilder bul = new StringBuilder("adflkwefnkl");

                    bul.delete(1,3);//结果为:"alkwefnkl"

                    bul.delete(0,bul.length());//清空缓存区,bul为""

                    bul.deleteCharAt(2);//结果为:"adlkwefnkl"

3.3 获取:

      char charAt(int index)        --->   获取指定位置index上的字符

      int indexOf(String str)        --->   获取指定字符串的位置

      int lastIndexOf(String str)   --->   反向获取指定字符串的位置

      int length()                         --->   获取字符串的长度

      String substring(int start,int end):在Stringbuilder中比较特殊,返回的是String类型。

     例如       StringBuilder bul = new StringBuilder("adflkwefnkl");

                   bul.charAt(1);//结果为:"d"

                   bul.indexOf("a");//结果为:0

                   bul.lastIndexOf("n");//结果为:8

                   bul.length();//结果为:10       

                   bul.substring(1,3)//结果为:"df"

3.4 修改:

      StringBuilder replace(start,end,string)        --->   将start到end(不包含end)位置上的字符串更改为指定字符串string

      void setCharAt(int index,char ch)                --->   替换指定位置上的字符为指定字符

     例如       StringBuilder bul = new StringBuilder("adflkwefnkl");

                   bul.replace(1,3,"JAVA");//结果为:"aJAVAlkwefnkl"

                   bul.replace(2,'M');//结果为:"adMlkwefnkl"

3.5 反转

     S天ringBuilder setreverse()  --->   替换指定位置上的字符为指定字符

     例如       StringBuilder bul = new StringBuilder("ABCD");

                   bul.reverse();//结果为:"DCBA"

引用数据类型

1、有时候,需要将int这样的基本类型转换为对象,以便可以使用一些方法。所有的基本类型都有一个相对应的类。这些类就称之为包装类。

2、基本数据类型对应的包装类:

      基本数据类型              引用数据类型(包装类)

           byte                               Byte

           short                             Short

           int                                  Integeter

           long                              Long

           float                              Float

           double                         Double           

           boolean                       Boolean

           char                              Character

二、常见操作:

用于基本数据类型和字符串类型间的转换

1、转换:

1)基本数据类型转换为字符串

      基本数据类型 + ""              --->   直接转换成字符串

      基本数据类型.toString(基本数据类型值)      --->   如:Integer.toString(34);//将整数34变为"34"

2)字符串转换为基本数据类型:

      基本数据类型名  变量名 = 包装类名.pase包装类名(String)

      如:int a = Integer.paseInt("123");//结果为123

2、转二进制:

      Integer.toBinaryString(int a);

     十进制 -----> 其他进制

1)转为二进制:toBinaryString();

2)转为八进制:toOctalString();

3)转为十六进制:toHexString();

     其他进制 -----> 十进制

    parseInt(String,radix);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值