黑马程序员——String类



------- android培训java培训、期待与您交流! ----------



String

 


java中用String类进行描述。对字符串进行了对象的封装。这样的好处是可以对字符串这种常见数据进行方便的操作。对象封装后,可以定义N多属性和行为。


如何定义字符串对象呢?

String s = "abc";只要是双引号引起的数据都是字符串对象。

特点:字符串一旦被初始化,就不可以被改变,存放在方法区中的常量池中。

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

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


常见的操作有哪些?

"abcd" 


构造方法:将字节数组或者字符数组转成字符串。

String s1 = new String();//创建了一个空内容的字符串。

String s2 = null;//s2没有任何对象指向,是一个null常量值。

String s3 = "";//s3指向一个具体的字符串对象,只不过这个字符串中没有内容。

//一般在定义字符串时,不用new

String s4 = newString("abc");

String s5 = "abc"; 一般用此写法

new String(char[]);//将字符数组转成字符串。

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


1、获取

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

           int length():获取长度

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

           char charAt(intindex);

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

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

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

           indexOf(String str):返回的是str在字符串中第一次出现的位置。

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

2、判断

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

           booleancontains(str);

           特殊之处:indexOf(s boolean contains(str);tr):可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中存在。 所以,也可以用对指定判断是否包含。

                      if(str.indexOf("aa")!=-1)

                  而且该方法即可以判断,又可以获取出现的位置。

    2.2 字符串是是否有内容。

           booleanifEmpty();原理就是判断长度是否为0. “” null是有区别的

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

           booleanstartsWith(str);

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

           booleanendsWith(str);

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

           booleanequals(str);

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

           booleanequalsIgnoreCase();

3、转换

    3.1 将字符数组转成字符串

           构造函数:String(char[])

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

           静态方法:static String copyValueOf(char[]);

                    static String copyValueOf(char[] data,intoffset,int count);

                    static String valueOf(char[]);

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

           char[]toCharArray();

    3.3 将字节数组转成字符串

           String(byte[])

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

    3.4 将字符串转成字节数组

           byte[]getbytes();

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

           static StringvalueOf(int)

           static StringvalueOf(double)

           //3+"";//String.valueOf(3);//它们的结果是一样的。  


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


  String s1 =s.replace('k','g');//如果要替换的字符不存在,返回的还是原串。

4、替换

  Stringreplace(olechar,newchar);//如果要替换的字符不存在,返回的还是原串。

  Stringreplace(CharSequence target, CharSequence replacement); //替换字符串

5、切割

  String[] split(regex);

6、子串,获取字符串中的一部分

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

  Stringsubstring(begin,end);//包含头,不包含尾。s.substring(0,s.length());

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

  7.1 将字符中转成大写或者小写

       StringtoUpperCase();

       StringtoLowerCase();

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

       String trim();

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

       intcompareTo(string);


 

int compareTo(string);方法:



 


练习:



 


StringBuffer是字符串缓冲区


是一个容器


构造一个其中不带字符的字符串缓冲区,初始容量为 16 个字符。 


特点:

1、长度是可变化的。

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

3、最终会通过toString方法变成字符串


C create U update R read D delete


1、存储--面盆理论

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

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

2、删除

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

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

3、获取

         Char charAt(intindex);

         int indexOf(Stringstr);

         intlastIndexOf(String str);

         int length();

         Stringsubstring(int start,int end);//访问的是String不是StringBuffer

4、修改

         StringBufferreplace(start,end,string);

         void setCharAt(intindex,char ch);

5、反转

         StringBufferreverse();

6void getChars(int srcBegin, intsrcEnd, char[] dst, int dstBegin);将缓冲区中指定数据存储到指定字符数组中

 


JDK1.5出现StringBuiler;构造一个其中不带字符的字符串生成器,初始容量为 16 个字符。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。

方法和StringBuffer一样;

 


StringBuffer是线程同步


StringBuilder是线程不同步 


单线程操作,使用StringBuilder 效率高。


多线程操作,使用StringBuffer 安全。 


以后开发,建议使用StringBuilder


升级三个因素:

1、提高效率

2、简化书写

3、提高安全性

 


练习:


class  Test{

    public static void main(String[] args) {

       String s1 = "java";

       String s2 = "hello";

       method_1(s1,s2);

       System.out.println(s1+"...."+s2); //java....hello

       StringBuilder s11 = new StringBuilder("java");

       StringBuilder s22 = new StringBuilder("hello");

       method_2(s11,s22);

       System.out.println(s11+"-----"+s22); //javahello-----hello

    }

    public static void method_1(String s1,String s2){

       s1.replace('a','k');

       s1 = s2;

    }

    public static void method_2(StringBuilder s1,StringBuilder s2){

       s1.append(s2);

       s1 = s2;

    }

}

 


Integer对象


数字格式的字符串转成基本数据类型的方法:

1:将该字符串封装成了Integer对象,并调用对象的方法intValue();

2:使用Integer.parseInt(numstring):不用建立对象,直接类名调用; 


将基本类型转成字符串:

1Integer中的静态方法 String toString(int);

2int+""; 


将一个十进制整数转成其他进制:

    转成二进制:toBinaryString

    转成八进制:toOctalString

    转成十六进制:toHexString

    toString(int num,int radix); 


将其他进制转换十进制:

parseInt(string,radix); //将给定的数转成指定的基数进制; 


jdk1.5版本后,对基本数据类型对象包装类进行升级。在升级中,使用基本数据类型对象包装类可以像使用基本数据类型一样,进行运算。

    Integer i = new Integer(4); //1.5版本之前的写法;

    Integer i = 4; //自动装箱,1.5版本后的写法;

    i = i + 5;

  //i对象是不能直接和5相加的,其实底层先将i转成int类型,在和5相加。而转成int类型的操作是隐式的。自动拆箱:拆箱的原理就是i.intValue();i+5运算完是一个int整数。如何赋值给引用类型i呢?其实有对结果进行装箱。

Integer c = 127;

    Integer d = 127;

    System.out.println(c = = d); //true

    //在装箱时,如果数值在byte范围之内,那么数值相同,不会产生新的对象,也就是说多个数值相同的引用指向的是同一个对象。


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值