黑马程序员: String类的学习

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

String(字符串)类
  
	(1)有很多字符组成的字符序列叫做字符串.
	(2)创建字符串的对象
		A:直接给字符串对象赋值
			String s = "Hello";
		B:通过构造方法传递字节数组参数
			byte[] bys = {97,98,99,100,101};
			String s = new String(bys);
			String s = new String(bys,1,3); //从1开始,取得3个
		C:通过构造方法传递字符数组参数
			char[] chs = {'h','e','l','l','o'};
			String s = new String(chs);
			String s = new String(chs,1,3);

		面试题:
			String s1 = "haha";
			String s2 = "haha";
			sop(s1==s2);
			sop(s1.equals(s2));

			String s3 = new String("haha");
			sop(s1==s3);
			sop(s1.equals(s3));
			==和equals什么时候使用:
			1:比较基本数据类型的时候使用 ==
			2:比较引用数据类型的时候用 
			  == 表示比较的是对象的地址值
			  equals 没有重写Object的方法,比较的是地址值.
				 重写了Object的方法,比较的是什么,根据重写来定.

	(3)字符串的功能使用
		A:判断
			**equals 判断字符串的内容是否相同,区分大小写
			**equalsIgnoreCase 判断字符串的内容是否相同,不区分大小写
			**startsWith 是否以指定的字符串开头
			**endsWith 是否以指定的字符串结尾
			**contains 判断某个字符串是否包含指定的字符串
			**isEmpty 判断字符串是否为空

			练习:模拟登录,给三次机会,并提示还有几次.

		B:获取
			**charAt 获取指定索引处的字符
			**length 获取字符串的长度
			***注意: 数组length属性,字符串有length方法.
		*******查找*****************
			**indexOf 获取指定字符/字符串第一次出现的索引
			  indexOf(char/String,fromIndex) 从指定位置开始 获取指定字符/字符串第一次出现的索引
			  lastIndexOf
			  lastIndexOf(char/String,formIndex)

		*******截取********
			**substring(int index) 从指定位置到末尾截取字符串.
			  subString(int beginIndex,int endIndex) 从指定开始位置,到指定的末尾位置,截取字符串.
				***注意: 左闭右开.

			练习:给定一个字符串统计,统计大写字母,小写字母,数字出现的个数.
				***注意:不包括特殊字符
		
		C:转换
			**byte[] getBytes(String s) 把字符串转换成一个字节数组
			**char[] toCharArray(String s) 把字符串转成一个字符数组  重点
			**static String copyValueOf(char[] data) 
          			返回指定数组中表示该字符序列的 String。 
			  static String copyValueOf(char[] data, int offset, int count) 
          			返回指定数组中表示该字符序列的 String。 
			**把基本数据类型转成字符串 次重点
				int x = 3;
				如何得到字符串呢: x+""
				现在怎么写? String.valueOf(x)
			**toUpperCase  把字符串中所有字符串转成大写
			**toLowerCase  把字符串中所有字符串转成小写
			**concat 字符串的连接

			练习:给定一个字符串,把它变成首字母大写,其他字母小写的字符串.
				***链式编程
				***String s = "afassfHaADSIOPFUAASFasfd";
				   sop(s.substring(0,1).toUpperCase().concat(s.substring(1).toLowerCase()));
				
		D:其他
			**替换 replace(char oldChar,char newChar)
			       replace(String oldString,String newString)
			**切割
			       String[] split(String str)
			**去除字符串两端的空格
				String trim()
			**按照字典(自然,a-z)顺序对字符串进行比较.
				compareTo
StringBuffer:字符串的缓冲区,缓冲区主要用于存储数据
	-------添加
	StringBuffer添加元素使用的是同一个对象的区域,并且可以添加任意类型的元素。
  	append(); //添加元素(可以添加任何数据类型的值)
  	insert();//在指定的地方插入元素

 	 -----删除元素
   	StringBuffer delete(int start,int end)删除指定范围内的字符串
  	StringBuffer  delete(int index);删除指定位置的字符
   	void setCharAt(int index,char ch); 替换指定位置的字符


	------其他的方法
     	StringBuffer replace(int start,int end,String str); 替换指定范围内的字符串
	 String  substring(int start);从指定位置截取到末尾
	 String substring(int start,int end );截取指定范围内的字符串
	 StringBuffer reverse()反转


	 StringBuffer和String的相互转换
	    不能直接把一字符串对象赋值给StringBuffer对象


------string到StringBuffer
		String s="";
		//第一种方法从String变成StringBuffer
		  StringBuffer sb=new StringBuffer(s);
		  第二种方法
		    sb.append(s);
----把 StringBuffer转成String
	  StringBuffer sb=new StringBuffer();
	       
	   String ss=sb.toString();

面试题:三者区别?
	1:StringBuffer和StringBuilder都是可变的字符序列。
	     而String一旦被赋值,内容就不可以再改变。
	2:StringBuffer是线程安全的,效率低。
	   StringBuilder是线程不安全的,效率高。
	   
StringBuilder就是用来替代StringBuffer。
	JDK的升级:
		A:效率
		B:安全
		C:简化书写
		
效率和安全是相对的。


-----------------包装类------------
为了方便我们知道整数的最大值,进制的转换。
java就对基本数据类型都提供了对应的封装类类型 
byte  Byte
short Short
int   Integer
long  Long
char  Character
boolean Boolean
float   Float

学习Integer类的构造方法
  Integer(int value):把基本数据类型的int值转换成Integer对象类型 
	int x=10;
	Integer i=new Integer(x);
	System.out.println(i);
  Integer(String s):要求被转换的字符串是全部由数字字符组成的字符
        String s="10";
	Integer it=new Integer(s);
	System.out.println(s);

	NumberFormatException:抛出异常
  Integer类要掌握的方法:
  int----String类型 :把int类型的转成String类型的
    String.valueOf(int x) 
    Integer.toString(int x);

   String---int类型  :把String类型的转成int类型的
   Integer.parseInt(String s);
   String --Integer--int
   Integer i=new Integer(s);
   int x=i.intValue(i);

   包装类到底是怎么包装的
     它是通过
     装箱:Integer i=100;这样,其实是把一个基本的数据类型给装箱成一对象类型
     拆箱:i+100;其实底层调用i.intValue方法,也就是拆箱动作。最后在把计算的结果300装箱成Integer类型 

      拆箱其实就是i.intValue()+100;
       
  jdk5.0以后的,拆箱和装箱动作,让我们在进行计算的时候,方便了很多
  但是带来了问题,需要我们在进行计算前,判断对象是不是null.


  面试题:
 * 
 * 一个字节:0 1111111
 * 有符号位的话,最大的值是127.
 * 
 * 包装类里面直接赋值的时候,127以下的值会在一个常量池里。直接从常量池获取。
 */
public class IntegerTest {
	public static void main(String[] args) {
		// 定义两个Integer类型的数据
		// true,false
		Integer i1 = new Integer(128);
		Integer i2 = new Integer(128);

		// Integer类型重写了equals方法,比较的是值
		System.out.println("equals:" + i1.equals(i2)); //true;
		System.out.println("==:" + (i1 == i2));  // false  //比较对象时,==是直接比较的地址值 

		// true,false
		Integer i3 = 128;
		Integer i4 = 128;
		System.out.println("equals:" + i3.equals(i4)); //true;
		System.out.println("==:" + (i3 == i4));  //false

		System.out.println("*****************************");
		// true,false
		Integer i5 = new Integer(127);
		Integer i6 = new Integer(127);
		System.out.println("equals:" + i5.equals(i6)); //true;  是比较的两个数在常量池里面的数
		System.out.println("==:" + (i5 == i6));      //false;  是比较的两个数的地址值 

		// true,true
		Integer i7 = 127;
		Integer i8 = 127;
		System.out.println("equals:" + i7.equals(i8)); //true;
		System.out.println("==:" + (i7 == i8));  //true;
	}
}

------
Math:数学运算的类
特点:没有构造方法,都是静态的成员
成员:
    PI
    E
 方法:
   abs:绝对值
   ceil:大于等于参数的最小整数
   floor:小于等于参数的最大整数
   max: 获取两个值中较大的值
   min:获取两个值中较小的值
   pow:获取x的y次方的值 
   random:产生一个随机数,范围[0.0~1.0]
   round:四舍五入
   sqrt:平方根
   // 要掌握的属性
System.out.println("PI:" + Math.PI);
System.out.println("E:" + Math.E);

// 要掌握的功能
System.out.println("abs:" + Math.abs(-12));
System.out.println("ceil:" + Math.ceil(-12.66));
System.out.println("floor:" + Math.floor(-12.66));
System.out.println("max:" + Math.max(-12, 23));
System.out.println("min:" + Math.min(-12, 23));
System.out.println("pow:" + Math.pow(2, 5));
System.out.println("round:" + Math.round(12.567));
System.out.println("sqrt:" + Math.sqrt(16));
System.out.println("********************************");
System.out.println("random:" + Math.random());
// 我要产生一个1-100之间的数据
System.out.println("random:" + ((int) (Math.random() * 100) + 1));

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值