黑马程序员---String、StringBuffer、StringBuilder

------- http://www.itheima.comjava培训、android培训期待与您交流!-------


一、java API
1、String
  String是一个类,且不能有子类(被final修饰),不可复写其功能。
字符串是一个特殊的对象,字符串一旦初始化就不能被改变。
(1)String s1 = “abc”; s1是类类型变量,一定指向abc对象。若s1=”kk”;s1只是指向了kk,而s1未变。
   String s2 = new String(“abc”); s2在堆内存中有两个对象。
此时,s1==s2;是错的,比较的是对象的地址。
s1.equals(s2);是正确的,比较的是对象中的内容。
(2)字符串的操作
A、获取
              
 String s1 = "wangtingting";
		//获得字符串的长度(字符串中包含的字符数)
		int x = s1.length();
		//根据字符串的索引(位置)获取该位置的字符
		char ch1 = s1.charAt(3);
		//根据字符获取某个字符在该字符串中的位置(返回的是该字符第一次出现的位置)
		int i1 = s1.indexOf('a');
		//获取从指定位置开始,该字符在字符串出现的位置
		int i2= s1.indexOf('i', 6);
		//i字符在该字符串中第一次出现的位置
		int i3 = s1.indexOf('i');
		//n字符串在该字符串中第一次出现的位置
		int i4 = s1.indexOf("n");

		//可以索引该字符串第一次在整个字符串出现的位置,如果返回-1,则该字符串p不在整个字符串中存在
		//也可用于对指定字符串判断是否存在
		int i7 = s1.indexOf("p");

		//n该字符串从指定位置(索引3)开始,在字符串中出现的位置(且是该字符串在指定位置后的第一次出现的位置)
		int i5 = s1.indexOf("n",3);
		//该字符在整个字符串中最后出现的位置
		int i6 = s1.lastIndexOf('i');
		System.out.println(i7);

B、判断
       
String s2 = "wangtingting";
		//字符串中是否包含某一字串
		boolean b1 = s2.contains("ting");
		//判断字符串是否为空(字符串长度是否为0)
		boolean b2 = s2.isEmpty();
		//判断该字符串是否是以字符串ti开头
		boolean b3 = s2.startsWith("ti");
		boolean b4 = s2.endsWith("ng");
		//判断给出的字符串是否和s字符串相同
		boolean b5 = s2.equals("wangtingting");
		//判断给出的字符串是否和s字符串的内容相同,并忽略大小写
		boolean b6 = s2.equalsIgnoreCase("Wangtingting");
		System.out.println(b6);

C、转换
char[] arr = {'e','f','h','l','m','o','r','y'};
		//使用构造函数的方法将字符数组转换成字符串
		String str1 = new String(arr);
		//将字符数组中的一部分转换成字符串。 起始位 转换的个数
		//String(char[] value, int offset, int count)
		String str2 = new String(arr,3,4);
		
		//str2 =arr.copyValueOf(arr);
		System.out.println(str2);

		//将字符串转成字符数组
		byte[] bt = {'g','r','z','y','j','m'};
		String str3 = new String(bt);
		System.out.println(str3.toCharArray());


D、切割和替换
 public static void splitAndReplace()
	{
		//替换
		String str3 = new String("wangting");
		//用新字符串替代原字符串中的内容
		//若替换的字符串不存在,则返回原字符串"你好"
		System.out.println(str3.replace("ting","shan"));
		

		//以,将字符串切割
		String stri = "wangwu,lisi,zhangsan";
		String[] arr1 = stri.split(",");
		for (int x = 0;x<arr1.length ;x++ )
		{
			System.out.println(arr1[x]);
		}

		//默认获得的是从位置3(包含3)开始以后的子串
		System.out.println(str3.substring(3));
		//获取的是包含头4不包含尾7的子串
		System.out.println(str3.substring(4,7));


		//将字符串转换为大小写
		String str4 = new String("WANGSHAN");
		System.out.println(str3.toUpperCase());
		System.out.println(str4.toLowerCase());

		//将字符串中的空格去除
		String str5 = new String("   WANGSHAN      ");
		System.out.println(str5.trim());

		//对两个字符串进行自然顺序比较
		int num = str4.compareTo("hellowangting");
		System.out.println(num);
	}


2、StringBuffer 字符串缓冲区,相当于一个容器,用于存储字符串该字符串缓冲区的 长度可以变化/可操作多个数据类型/最终会通过toString方法转变成字符串。
(1)添加
  
StringBuffer sb = new StringBuffer("wangtingting");
  		//在已有字符串的末端添加内容
  		System.out.println(sb.append("你好"));
  		System.out.println(sb.append(true).append(123));
  		//sb和sb1指向的是同一个对象
  		StringBuffer sb1 = new StringBuffer("wangtingting");
  		System.out.println(sb==sb1);

(2)删除
  
//删除从start到end之间的字符,包含头,不包含尾
  		StringBuffer sb2 = sb.delete(4,8);
  		//删除指定位置的字符串
  		StringBuffer sb3= sb.deleteCharAt(1);
  		//清空缓冲区
  		StringBuffer sb4 = sb.delete(0,sb.length());
  		//获取4位置上的字符
  		char ch2  = sb.charAt(4);
  		System.out.println(ch2);

(3)修改
  
StringBuffer sb0 = new StringBuffer("wangtingting");
  		//在1位置上插入hello这个字符串
  		System.out.println(sb0.insert(1,"hello"));
  		//将字符串ting替换成字符串shan 包含头,不包含尾
  		System.out.println(sb0.replace(8,12,"shan"));
  		将字符串中的某个字符替换
  		sb0.setCharAt(1,'o');
  		System.out.println(sb0.toString());//或直接打印sb0

(4)反转
   将整个字符串反转
   System.out.println(sb0.reverse());
(5)将缓冲区中的指定数据存储到指定字符组中
  
//void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)  
  		StringBuffer strb = new StringBuffer("wangshan");
  		char[] chs = new char[5];
  		strb.getChars(4,8,chs,1);
  		for (int x = 0;x<chs.length ;x++ ){
  	System.out.println("char["+x+"]="+chs[x]+";");
  		}

3、StringBuilder
  StringBuilder也是字符串缓冲区,只是在JDK1.5版本之后出现的新特性。
  StringBuffer是线程同步的
  StringBuilder是线程不同步的
  升级原因:  提高效率、简化书写、提高安全性
基本数据类型对象包装
基本数据类型byte、short、int、long、boolean、float、double、char对应引用数据类型Byte、Short、Integer、Long、Boolean、Float、Double、Character
将数据类型对象包装的作用:用于基本数据类型和字符串之间做转换。
基本数据类型-->字符串
        System.out.println(3+" ");
System.out.println(Integer.toString(3));
字符串-->基本数据类型
  int num = Integer.parseInt("123");
boolean b = Boolean.parseBoolean("true");
Integer i = new Integer("123"); //打印结果 123
int num2 = i.valueOf("123"); //123
System.out.println(num2);
十进制-->其他进制
              System.out.println(Integer.toBinaryString(-6));
System.out.println(Integer.toHexString(60));
System.out.println(Integer.toOctalString(8));
其他进制-->十进制
             //将110转换成十进制、二进制、八进制的数
System.out.println(Integer.parseInt("110",10));
System.out.println(Integer.parseInt("110",2));
System.out.println(Integer.parseInt("110",8));
基本数据类型新特性
(1)
              Integer x = new Integer("123");
   Integer y = new Integer(123);
   System.out.println(x==y); //false
   System.out.println(x.equals(y));//true
  x和y的地址值不同,
  但x和y指向的内容相同。
(2)
   Integer x1= 4;
   System.out.println(x1+2);
  自动装箱:x1代表的是一个对象,是引用数据类型,由于自动装箱功能,x1可以直接这样写。
  自动拆箱:x1+2 ,将类类型变量直接作为值进行运算。



---------- http://www.itheima.comjava培训、android培训期待与您交流! ----------

你可能感兴趣的:(java)