黑马程序员——String类

来源:互联网 发布:linux安装amd显卡驱动 编辑:程序博客网 时间:2024/05/20 12:25
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一,String类

String类是一个特殊的对象,用于描述字符串事物。

示例:

String  s1 = "abc",其中s1是一个类类型变量,“abc"是一个对象

字符串最大的特点是 一旦被初始化就不可以改变

小例子:

String  s1 = "abc"; //s1代表1个对象

String  s2 = new String("abc");//s2代表2个对象

System.out.println(s1==s2);//false 因为是两个不同的对象

System.out.println(s1.equals(s2));//equals 比较的是地址值String类复写了Object类中equals方法,该方法用于判断字符串内容是否相同

s1 = "kkk";//s1指向变了。而不是“abc”变了。对象并未改变。

字符串常见的操作:

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

       int length();获取长度。

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

       char charAt(int index);

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

       int indexOf(int ch);//返回的是ch在字符串中第一次出现的位置。

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

       int indexOf(Stringstr);//返回的是str在字符串中第一次出现的位置。

       int indexOf(Stringstr,int fromIndex); 从fromIndex指定位置开始,获取str在字符串中出现的位置。

        int lastIndex(int ch):反向索引,只是从左边开始。
     
2,判断

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

       boolean contains(str);

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

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

       if(str.indexOf("aa")!=-1)//包含。

       //只为判断,用contains.

       //要判断,还要拿位置。用indexOf;而且该方法既可以判断,又可以获取出现的位置。

       字符串中是否有内容。

       boolean isEmpty();原理就是判断长度是否为0。“

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

       boolean startsWith(str)

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

        boolean endsWith(str)

        判断字符串的内容是否相同。复写了Object类中的equalsf方法。

        boolean equals(str);

        判断内容是否相同,并忽略大小写。

        booleanequalsIgnoreCase();//邮箱登陆验证码大小写情况
     
3,转换

      将字符数组转成字符串。

      构造函数:

       String(char[])

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

       offset 是起始位。count是数量。
          
      静态方法:
        static StringcopyValueOf(char[]);

        static StringcopyValueOf(char[] data, int offset, int count);//一部分。

        static StringvalueOf(char[]);
 
      将字符串转成字符数组。

         char[]toCharArray();
 
      将字节数组转成字符串。

          String(byte[])

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

          byte[] getBytes();

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

           static StringvalueOf(int)

           static String valueOf(double)

      特殊,字符串和字节数组在转换过程中,是可以指定编码表的。
 
4,替换

      String replacee(oldchar , newchar);

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

5,切割

      String[] split(regex);//返回一个String数组。

      String[] arr = s.split(“,”);
 
6,子串,获取字符串中的一部分

      String substring(begin);//从指定位置到结尾。如果角标不存在,会出现字符串交表越界。

      String substring(begin, end);//包含头,不包含尾。

      获取全部字符串:s.substring(0,s.length());
 
7,转换,去除空格,比较。

      将字符串转成大写或者小写

       String toUpperCase();

       String toLowerCase();

       将字符串两端的多个空格去除。  

       对两个字符串进行自然顺序的比较。

       int compareTo(string);

小练习:

示例一:

/*模拟一个trim方法,去除字符串两端的空格。思路:1,判断字符串第一个位置是否是空格,如果是,继续向下判断,如果不是,直到不是空格为止   结尾处判断空格也是如此2,当开始和结尾判断到都不是空格,就是要获取的字符串*/class  StringTest{public static void sop(String str){    System.out.println(str);}public static void main(String[] args) {String s = "   sd gh  ";sop("("+s+")");s=trim(s);sop("("+s+")");}public static String trim(String str){  int start=0,end=str.length()-1;  while(start<=end && str.charAt(start)==' ')  start++;  while(start<=end && str.charAt(end)==' ')          end--;  return str.substring(start,end+1);}}
运行结果:



示例二:

/*反转字符串*/class StringTest1 {public static void main(String[] args) {String s = "   sd gh  ";sop("("+s+")");sop("("+reverseString(s)+")");}public static void sop(String str){    System.out.println(str);}public static String reverseString(String s){  //字符串变数组  char[] chs = s.toCharArray();  //反转数组  reverse(chs);  //将数组变成字符串  return new String(chs);}public static void reverse(char[] arr){  for(int start=0,end=arr.length-1;start<=end;start++,end--)  {            swap(arr,start,end);  }}    public static void swap(char[] arr,int x,int y){        char temp = arr[x];arr[x] = arr[y];arr[y] = temp;}}
运行结果:



二,StringBuffer

1,StringBuffer是字符串缓冲区,是一个容器。,

2,特点:

(1 )而且长度是可变化的。

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

(3 )最终会通过toString方法变成字符串。

基本操作
1,存储

        StringBuffer append():将指定数据作为参数添加到已有数据的结尾处。(不支持byte,short)

        StringBuffer insert(index ,数据):可以将数据插入到指定位置。

2,删除

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

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

        清空缓冲区:对象.delete(0,对象.length());

3,获取
        char charAt(int index)

        int indexOf(String str)

        int lastIndexOf(String str)

        int length()

        String substring(int start,int end)(最后返回的是String)

4、修改

        StringBuffer replace(int start,int end,String str)

        void setCharAt(int index,char ch)(只替换一个)

5,反转

        StringBuffer reverse()

6,将缓冲区中指定数据存储到指定字符数组中

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

在JDK1.5版本之后出现了StringBuilder。他和StringBuffer 的功能一样

StringBuffer是线程同步的,有锁,效率低

StringBuilder是线程不同步的,无锁,效率高

以后开发,建议使用StringBuilder。

小知识:升级三因素

1,提高效率

2,简化书写

3,提高安全性

三,基本数据类型对象包装类

基本数据类型     引用数据类型(类)
    byte                        Byte
   short                      Short
     int                         Integer
    long                       Long
  boolean                 Boolean
    float                       Float
   double                  Double
    char                    Character

将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据,

基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换。

1,基本数据类型转成字符串:

      a,基本数据类型+" "

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

      如:Integer.toString(34);//将34整数转成"34";
 
2,字符串转成基本数据类型

a,xxx a = Xxx.parseXxx(String);(静态方法)

int num = Integer.parseInt("123");

long x = Long.parseLong("123");


b,intValue();对象调用方式

Integer i =new Integer("123");

int num = i.intValue();

注意:必须传入相应格式的数据,否则会出现NumberFormatException
 
十进制转成其他进制:

toBinaryString();

toHexString();

toOctalString();

其他进制转成十进制:

parseInt(String,radix);String十进制表现形式,radix代表的进制

Integer x = new Integer("123");

Integer y = new Integer("123");

sop(x==y);//false(两个对象)

sop(x.equals(y));//true(因为Integer复写了Object的equals,变成了比较值是否相同)
 
JDK1.5以后的新特性:

Integer x = new Integer(4); 可以直接写成Integer x = 4;//自动装箱。

x = x + 5;//自动拆箱。通过intValue方法。

需要注意:在使用时,如果Integer x = null;上面的代码就会出现NullPointerException

例子:

Integer m = 128,Integer n = 128

打印:m==n结果:false

Integer a = 127,Integer b = 127;

打印:a==b结果:true

因为当数值在byte范围内时(-128--127),对于新特性,如果该数值已经存在,则不会开辟新空间。

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