黑马程序员——Object 类,String类,StringBuffer/StringBuilder类,基本数据类型封装类



------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


兴趣是学习编程最好的老师

不积跬步,无以至千里

这辈子没办法做太多事情,所以每一件都要做到精彩绝伦。


<Object 类>


1.Object类位于java.lang.Object它是所有类的超类。
2.Object类中的一些基本方法:

public String toString();默认返回该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串
public boolean equals(Object obj);
 1.判断"基本数据类型"的相等性,使用"==";
 2."=="也可以应用于"引用类型",在Object中定义:判断是"引用是否相等"
 3.当我们需要判断两个对象中的属性值,是否完全相同时,我们一般来重写equals()方法(见Student的equals())

例如:

public class Test1 {

	public static void main(String[] args) {
		Student stu1 = new Student("张三",'女',18);
		Student stu2 = new Student("李四",'男',20);
		Student stu3 = new Student("王五",'女',18);
		System.out.println(stu1);
		System.out.println(stu2);
		//判断"基本数据类型"的相等性,使用"==",判断值是否相等
		int num1 = 20;
		int num2 = 20;
		System.out.println("num1 == num2 :" + (num1 == num2));//肯定是true
		//将"=="应用于引用类型:判断引用是否相等;
		System.out.println("stu1 == stu2 :" + (stu1 == stu2));//肯定是false(两个地址空间,不用考虑对象内部存储什么)
		System.out.println("stu1 == stu3 :" + (stu1 == stu3));//肯定是false(两个地址空间,不用考虑对象内部存储什么)
		Student stu4 = stu3;//将stu3的引用(地址)赋给了stu4
		System.out.println("将stu3的引用赋给了stu4......");
		System.out.println("stu3 == stu4 :" + (stu3 == stu4));//true
		//目的:判断出stu1 和 stu3是相等的;
		//使用==判断是:false
		//1使用equals()方法判断stu1 和 stu3
		//默认情况下,equals()方法同==,判断的是"引用"是否相同,
		//但是我们的目的:判断两个对象中存储的数据是否完全相同;
		//基于此目的,我们需要重写Object类的equals()
		System.out.println("stu1.equals(stu3) : " + stu1.equals(stu3));
		System.out.println("stu1.equals(stu2) : " + stu1.equals(stu2));
		
	}


<String类>


1.String 类代表字符串。字符串对象在开发中是最常见的。为了方便我们对象字符串的操作,java就把字符串用对象进行了封装。这个封装类就是String类。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
2.字符串是常量;它们的值在创建之后不能更改,可以共享
一.String类的构造器:
 1).public String():默认构造器,没有任何参数
 2).参数为字节数组:
   String(byte[] bytes);
   String(byte[] bytes,int startIndex,int length)
  3).参数为字符数组:
   String(char[] value);
   String(char[] value,int startIndex,int length)
  4).String(String str):

   例如:

public class Test1 {

	public static void main(String[] args) {
		String str1 = new String();
		
		System.out.println("String str1 = new String():");
		System.out.println("str1 == null : " + (str1 == null));//str1是空引用么?		//false
		System.out.println("str1.length():" + str1.length());//str1中存储的字符串的长度?	//0
		System.out.println("str1.equals(\"\"):" + str1.equals(""));//str1中是空字符串么?//true
		System.out.println("---------------------");
		/*
		 * 参数为字节数组:
			String(byte[] bytes);
			String(byte[] bytes,int startIndex,int length)
		 */
		byte[] bArray = {97,98,99,100};
		String str2 = new String(bArray);//使用byte数组构造一个String,如果byte数组都是整数,对应0-127就是ASCII码表的值
		System.out.println("str2 = " + str2);
		String str3 = new String(bArray,1,3);//用bArray来构造,从bArray的索引1开始,取2个
	//	String str3 = new String(bArray,1,4);// java.lang.StringIndexOutOfBoundsException:(运行时异常)
		System.out.println("str3 = " + str3);
		/*
		 * 参数为字符数组:
	 		String(char[] value);
			String(char[] value,int startIndex,int length)
		 */
		char[] cArray = {'[','a','b',',','c','d',']'};
		
		String str4 = new String(cArray);
		System.out.println("str4 = " + str4);
		
		String str5 = new String(cArray,1,5);
		System.out.println("str5 = " + str5);
		/*
		 * 用一个字符串构造一个字符串:
		 * String(String str):
		 */
		String str6 = new String("abc");
		System.out.println("str6 = " + str6);
		
	}

}


3.String类的常用方法
 判断
   boolean equals(Object);       判断传入的字符串是否与调用的字符串字符序列是否相同,相同就返回true否则false
   boolean equalsIgnoreCase(string); 判断传入的字符串是否与调用的字符串字符序列是否相同,不区分大小写,相同就返回true否则false
   boolean contains(string);     判断传入的字符串是否被调用的字符串包含
   boolean startsWith(string);   判断调用的字符串是否以传入的字符串开头
   boolean endsWith(string);     判断调用的字符串是否以传入的字符串结尾
   boolean isEmpty();            判断字符串是否为空

 获取
   int length();                 获取字符串的长度
   char charAt(index);           通过索引获取对应的字符
   int indexOf(int ch);          通过传入int数或者是字符找对应索引
   int idnexOf(int ch,fromIndex);  在指定fromIndex的位置查找传入的字符
   int indexOf(string str);      通过传入字符串查找字符串所对应的索引
   int idnexOf(string str,fromIndex); 通过指定fromIndex的位置查找传入的字符串
   int lastIndexOf(ch);          通过传入的字符从后向前找字符的索引值,把从后向前第一次找到的索引值返回
   int lastIndexOf(ch,fromIndex):  通过指定fromIndex的位置,从后向前查找字符,把从后向前第一次找到的索引值返回
   int lastIndexOf(string);      通过传入的字符串,从后向前查找,将第一次找到字符串中第一个字符的索引返回
   int lastIndexOf(string,fromIndex): 通过指定fromIndex的位置,从后向前查找对应字符串,将第一次找到字符串中第一个字符的索引返回
   String substring(start);      通过传入的索引值开始向后截取,截取的是索引到length
   String substring(start,end);  通过传入的两个索引值截取,有开始有结尾,包含头不包含尾
  转换

   byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中
   char[] toCharArray():将此字符串转换为一个新的字符数组。
   static String copyValueOf(char[] chs):返回指定数组中表示该字符序列的 String
   static String valueOf(char[] chs):返回 char 数组参数的字符串表示形式。字符数组的内容已被复制,后续修改不会影响新创建的字符串。
   static String valueOf(int i)基本类型
   String toLowerCase():使用默认语言环境的规则将此 String 中的所有字符都转换为小写
   String toUpperCase():使用默认语言环境的规则将此 String 中的所有字符都转换为大写
   String concat(String str):将指定字符串连接到此字符串的结尾。

 替换
   String replace(oldChar,newChar); //将newChar替换OldChar,如果OldChar不存在,原字符串直接赋值给替换后字符串
   String replace(string,string);  
  
 切割
  String[] split(regex);     //通过regex切割字符串,切割后会产生一个字符串数组
  String s = "金三胖 郭美美 李天一";
  String[] arr = s.split(" ");
  
 去除字符串两空格
  String trim();       
  
 比较
  String str = "ab";
  String str1 = "bc";
  int num = str.compareTo(str1);   //如果str比str1大的话,返回的正数

例如:

public class Test {

	public static void main(String[] args) {
		String str = "abc";
		//1.byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中
		byte[] byteArray = str.getBytes();
		for(int i : byteArray){
			System.out.println(i);
		}
		System.out.println("--------------------");
		//2.char[] toCharArray():将此字符串转换为一个新的字符数组。 
		char[] charArray = str.toCharArray();
		for(char c : charArray){
			System.out.println(c);
		}
		System.out.println("--------------------");
		//3.static String copyValueOf(char[] chs):返回指定数组中表示该字符序列的 String
		char[] chArray ={'中','a','国','b'};
		String temp = String.copyValueOf(chArray);
		System.out.println(temp);
		System.out.println("--------------------");
		//4.static String valueOf(char[] chs):返回 char 数组参数的字符串表示形式。字符数组的内容已被复制,后续修改不会影响新创建的字符串。 
		temp = String.valueOf(chArray);
		System.out.println(temp);
		System.out.println("--------------------");
		//5.static String valueOf(int i):以及其他重载的方法,将基本类型转换为字符串
		temp = String.valueOf(20);
		System.out.println(temp);
		System.out.println(20);
		System.out.println("--------------------");
		//6.String toLowerCase():使用默认语言环境的规则将此 String 中的所有字符都转换为小写
		//7.String toUpperCase():使用默认语言环境的规则将此 String 中的所有字符都转换为大写
		String str2 = "HelloWorld";
		System.out.println("str2.toLowerCase()(转换为小写) : " + str2.toLowerCase());
		System.out.println("str2.toUpperCase()(转换为大写) : " + str2.toUpperCase());
		//8. String concat(String str):将指定字符串连接到此字符串的结尾。
		System.out.println("str2.concat(\"!!!!\") : " + str2.concat("!!!!"));
		System.out.println("str2 = " + str2);
	}

}


<StringBuffer/StringBuilder类>

1.StringBuffer类和StringBuilder类的功能完全一致,只是StringBuilder是线程不安全的,所以效率比较高,1.5版本出现,StringBuffer是线程安全的,效率相对较低,1.0版本出现的

2.构造方法:
  
 public StringBuffer()
  构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。 
 public StringBuffer(int capacity):
  使用一个初始容量来构造StringBuffer
 public StringBuffer(String str):
  使用一个字符串来构造StringBuffer
    
  成员方法:
  public int capacity():返回StringBuffer的当前容量
  public int length():返回包含的字符数;
3.StringBuffer的常用方法
 添加
  StringBuffer append(int x);     //在缓冲区的末尾追加   
  StringBuffer insert(int index,String str); //在指定索引位置添加

 删除
  StringBuffer delete(int start, int end); //包含头索引,不包含尾部索引
  StringBuffer delete(0,sb.length);   //清空缓冲区
   sb = new StringBuffer();
   sb.append("aaaaa");
   sb = new StringBuffer();
  StringBuffer deleteCharAt(int index);  //根据指定的索引删除索引对应的元素    
        
 修改
  StringBuffer  replace(int start,int end,string);//用String替换,包含头不包含尾 
  void setCharAt(int index ,char);   //修改,把指定索引位置的值改成传入的char值  
  StringBuffer reverse();      //将缓冲区的元素反转    
  void setLength(int len);     //根据传入的len值截取缓冲区的长度
     toString()         //转换成String     
        
 查找
  int indexOf(str);       //查找str在缓冲区第一次出现的位置
  int lastIndexOf(str);      //从后向前查找查找str在缓冲区第一次出现的位置 

public class Test {
	public static void main(String[] args) {
		StringBuffer buf1 = new StringBuffer();
		buf1.append("hello");
		System.out.println("容量:" + buf1.capacity());
		System.out.println("长度:" + buf1.length());
		buf1.append(true);
		System.out.println("容量:" + buf1.capacity());
		System.out.println("长度:" + buf1.length());
		buf1.append(3.14159);
		System.out.println("容量:" + buf1.capacity());
		System.out.println("长度:" + buf1.length());
		buf1.append("121212121212121212122222");
		System.out.println("--容量:" + buf1.capacity());//如果之前容量不够,将增加原长度的2倍 + 2
		System.out.println("--长度:" + buf1.length());
		buf1.append("1");
		System.out.println("容量:" + buf1.capacity());//如果之前容量不够,将增加原长度的2倍 + 2
		System.out.println("长度:" + buf1.length());
		
		System.out.println("----insert()----");
		StringBuffer buf2 = new StringBuffer("Hello");
		System.out.println(buf2.insert(5, "xxx"));//offset后移,将字符串插入:Hxxxello
	//	System.out.println(buf2.indexOf(6,"xxx"));//java.lang.StringIndexOutOfBoundsException(运行时)offset值一定<=字符长度
		System.out.println("----delete()----");
		StringBuffer buf3 = new StringBuffer("HelloWorld");
		System.out.println(buf3.delete(1, 2));//World
		
		System.out.println("----deleteCharAt()----");
		StringBuffer buf4 = new StringBuffer("HelloWorld");
		System.out.println(buf4.deleteCharAt(9));//
		
		System.out.println("----replace()----");
		StringBuffer buf5 = new StringBuffer("HelloWorld");
		System.out.println(buf5.replace(2, 5, "XXXX"));
		
		System.out.println("----substring()----");
		StringBuffer buf6 = new StringBuffer("HelloWorld");
		System.out.println(buf6.substring(10));
		System.out.println(buf6);
		
		System.out.println("--" + buf6.substring(7,8));
		
		System.out.println("----reverse()----");
		StringBuffer buf7 = new StringBuffer("你好中国");
		System.out.println(buf7.reverse());
		
	}

}


<基本数据类型封装类>

1.基本数据类型——封装类:

基本数据类型                          包装类型
 byte                                   Byte
 short                                  Short
 int                                    Integer
 long                                   Long
 char                                   Character
 boolean                                Boolean
 float                                  Float
 double                                 Double

2.封装类

  集合的泛型中只能写包装类型,基本数据类型不是对象不能直接装入。

  在JDK5之前, 如果想把基本数据类型装入集合, 必须人工的进行包装(转为包装类对象),JDK5之后, 基本数据类型和包装类之间可以自动的互相转换了。

3.包装类常用的方法
  static int parseInt(String s)  //将数字字符串转换成数字,如果是非数字字符串会转换失败,抛异常
  Integer.toBinaryString()  //将一个十进制数字,转换成二进制的字符串
  Integer.toOctalString()   //将一个十进制数字,转换成八进制的字符串
  Integer.toHexString()   //将一个十进制数字,转换成十六进制的字符串
  static long parseLong(String s)
  static double parseDouble(String s)
  static char forDigit(int digit, int radix)// radix代表的是进制例如二进制就传2,八进制就传8,digit代表后面进制里面的元素,而且不能超出后面进制的范围
  String s = "123";
  int x = Integer.parseInt(s);
  String s = "abc";
  char ch = Character.parseChar(s);





<正则表达式>


 1.正则表达式是一种字符串的约束格式.
 2.匹配
  String里的matches() 验证一个字符串是否匹配指定的正则表达式"18612345678".matches("1[34578]\\d{9}");
 3.分割
  String里的split() 用指定正则表达式能匹配的字符作为分隔符, 分割字符串 
 4.替换
  String里的replaceAll("","") 把字符串中能匹配正则表达式的部分替换为另一个字符串
 5.查找
  Pattern.compile() 创建正则表达式对象
  Pattern.matcher() 用正则表达式匹配一个字符串, 得到匹配器
  Matcher.find() 查找字符串中是否包含能匹配正则表达式的部分
  Matcher.group() 获取匹配的部分

 例如:

public class Test {

	public static void main(String[] args) {
		String str = "hid";
		/*********正则表达式-字符类************/
		//字符串中是否以h开头,以d结尾,而且中间只有一个字符,而且是元音字母a、e、i、o、u?
		String regex = "h[aeiou]d";
		System.out.println(str.matches(regex));
		//字符串中是否以h开头,以d结尾,而且中间只有一个小写英文字母?
		regex = "h[a-z]d";
		System.out.println(str.matches(regex));
		//字符串是否以大写英文字母开头,后跟id?
		String s = "A";
		regex = "[A-Z]id";//"[" + s + "-Z]id"
		System.out.println(str.matches(regex));
		//字符串首字母是否非数字?
		regex = "[^0-9]id";
		System.out.println(str.matches(regex));
		/********正则表达式-逻辑运算符**********/
		//判断小写辅音字母:
		String s1 = "ba";
		regex = "[a-z&&[^aeiou]]a";
		//判断首字母为h 或 H ,后跟一个元音字母,并以 d 结尾
		regex = "[hH][aeiou]d";
		
		/*******正则表达式-预定义字符类********/
		regex = "[0-9][0-9][0-9]";//使用字符类的方式
		regex = "\\d\\d\\d";//使用预定义字符类的方式:\\d 相当于[0-9]
		s1 = "23";
		System.out.println(s1.matches(regex));
		
		//2.判断字符串是否以h开头,中间是任何字符,并以d结尾:"h.d"
		regex = "h[.]d";//只匹配:h.d
		regex = "h.d";//匹配:h[任何字符]d
		s1 = "h中d";
		System.out.println(s1.matches(regex));
		//3.判断字符串是否是”had.”:
		regex = "had\\.";//可以
		regex = "had[.]";//也可以
		s1 = "hadd";
		System.out.println(s1.matches(regex));
		//4.判断手机号码(1开头,第二位是:3,4,5,7,8,后跟9位数字):
		regex = "1[34578][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]";
		regex = "1[34578]\\d\\d\\d\\d\\d\\d\\d\\d\\d";
		
		s1 = "19513865765";
		System.out.println(s1.matches(regex));
		
		/******使用限定符***********/
		regex = "1[34578]\\d{9}";//相当于:1[34578][0-9]{9}
		
		//1.判断1位或多位数字
		regex = "\\d+";
		s1 = "1";
		System.out.println(s1.matches(regex));
		//2.判断小数(小数点最多1次):
		regex = "\\d+\\.?\\d+";
		s1 = "3.1415";
		System.out.println(s1.matches(regex));
		//3.判断数字(可出现或不出现小数部分):
		regex = "\\d+(\\.?\\d+)?";
		s1 = "22.";
		System.out.println(s1.matches(regex));
		//4.满足:"22."的格式
		regex = "\\d+(\\.?\\d*)?";
		s1 = "22.";
		System.out.println(s1.matches(regex));
		//5.满足:+20,-3,22.格式:
		regex = "[+-]?\\d+(\\.?\\d*)?";
		s1 = "+-22.3";
		System.out.println(s1.matches(regex));
	}

}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值