黑马程序员——java学习7(152-165)——String类和StringBuffer,StringBuilder

时间:2023-01-18 04:02:38

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

1、字符串String

是一个对象,

最大特点,一旦被初始化,就不可被改变,即使改变,只是指针改变

常量池中已经存在的数据,不会再开辟空间,即第二个"abc"是指向同一个对象

 

 

1.1、获取

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

    int length();获取长度

  1.1.2根据位置获取位置上某个字符

    char charAt(int index);

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

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

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

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

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

    int lastIndexof(int ch): 倒叙获取位置

1.2、判断

  1.2.1、字符串中是否包含某一个子串

    boolean contains(str)

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

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

    而且该方法既可判断,也可以获取出现位置

  1.2.2、字符串中是否有内容

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

  1.2.3、字符串是否是以指定内容开头

    boolean startsWith(str);

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

    boolean endsWith(str);

  1.2.5、判断字符串内容是否相同。覆写Object类中的equals方法

    boolean equals(str)

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

    boolean equalsIgnoreCase();

 

1.3转换

  1.3.1、将字符数组转成字符串

      构造函数: String(char[])

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

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

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

           static String valueOf(char[]);

  1.3.2、将字符串转成字符数组

    char[] toCharArray();

  1.3.3、将字节数组转成字符串

    String(byte[])

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

  1.3.4、将字符串转成字节数组

    byte[] getBytes();

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

     static String valueOf(int)

     static String valueOf(double)

 

1.4、替换

  String replace(old char,newchar)

返回的是新串,原串不变

替换的字符不存在,返回原串

 

1.5、切割

  String[] split(regex);

 

1.6、子串

获取字符串的一部分

  String subString(begin);//从指定位置到尾

  String subString(begin,end);//包含头,不包含尾,所以整串是0到String.length

 

1.7、转换,去空格,比较

  1.7.1、将字符串转成大写或小写

    String toUpperCase();

    String toLowerCase();

  1.7.2、将字符串两端的多个空格去掉

    String trim()

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

    int compareTo(string);

 1 package learn;
 2 /*
 3  * 获取两个字符串的最大相同子串
 4  * 将短的串长度依次递减打印
 5  * */
 6 public class StringTest3 {
 7     public static String getMaxSubString(String s1,String s2)
 8     {
 9         String max="",min="";
10         max=(s1.length()>s2.length()?s1:s2);
11         min=(max==s1?s2:s1);
12         for(int x=0;x<max.length();x++)
13         {
14             for(int y=0,z=min.length()-x;z!=min.length()+1;y++,z++)
15             {
16                 String temp=min.substring(y,z);
17 //                sop(temp);
18                 if(s1.contains(temp))//if(s1.indexof(temp)!=-1)
19                     return temp;
20             }
21         }
22         return "";
23     }
24     public static void main(String[] args) {
25         String s1="abcwerthelloyuiodef";
26         String s2="cvhellobnm";
27         sop(getMaxSubString(s1,s2));
28     }
29     public static void sop(String str)
30     {
31         System.out.println(str);
32     }
33 }

 

 

1.8、StringBuffer

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

特点

(1)长度可变化

(2)可以字节操作多个数据类型

(3)最终会通过toString方法编程字符串

1.8.1.存储

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

  StringBuffer insert(index,任意数据类型);可以将数据插入到指定index位置

1.8.2.删除

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

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

1.8.3.获取

  char charAt(int index);

  int indexOf(String str);

  int lastIndexOf(String str);

  int length();

  String substring(int start,int end)

1.8.4.修改

  StringBuffer replace(start,end,string)

  void setCharAt(ine index,char ch)

1.8.5.反转

  StringBuffer reverse();

1.8.6、将缓冲区中的指定数据,存储到指定数组中

  getChar(int srcBegin, int srcEnd, char[] dst, int dstBegin);

JDK1.5后出现了StringBuilder,不同在于StringBuffer线程同步,StringBuilder线程不同步

 1 package learn;
 2 
 3 public class StringBufferDemo {
 4     public static void main(String[] args)
 5     {
 6         StringBuffer sb=new StringBuffer();
 7         sb.append("abc").append(true).append(34);
 8         
 9         sb.insert(1,"qq");
10         sop(sb.toString());
11     }
12     public static void sop(String str)
13     {
14         System.out.println(str);
15     }
16 }

 

1.9、升级三因素

  (1)提高效率

  (2)简化书写

  (3)提高安全性

 

2、基本数据类型对象包装类

int Integer

char Character

其他都是首字母大写

最常见作用

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

基本数据类型转成字符串

  基本数据类型+""

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

  如:Integer.toString(34);//将34转成"34";

字符串转成基本数据类型

  xxx a = Xxx.parseXxx(String);//静态调用方式

  int a = Int.parseInt("123");

  double b = Double.parseDouble("12.23");

  boolean b = Boolean.parseBoolean("true");

 

  Integer i = new Integer("123");//非静态,对象调用方式

  int num = i.intValue();

十进制转成其他进制

  toBinaryString();

  toHexString();

  toOctalString();

其他进制转成十进制

  parseInt(String,radix);

 1 package learn;
 2 
 3 public class IntegerDemo {
 4     public static void main(String[] args) {
 5         Integer x=4;
 6         x=x/*x.intValue()*/+2;//进行了自动拆箱,相加,自动装箱赋给x
 7         Integer m=128;
 8         Integer n=128;
 9         sop("m==n:"+(m==n));//false
10         
11         Integer a=127;
12         Integer b=127;
13         sop("a==b:"+(a==b));//true 因为a和b只想了同一个对象
14                             //因为当数值在byte范围内,对于新特性,该数值已经存在,则不会开辟新空间 
15     }
16     public static void sop(String str)
17     {
18         System.out.println(str);
19     }
20 
21 }