java基础第五课(字符串类,日期类)

类的学习。

1.字符串类

实现了Comparable<String> 接口:让字符串可以比较的能力了。
实现了Serializable接口:磁盘存储,网络交互

String:被final修饰了,所以不能有子类。
字符串是常量。它们的值在创建之后不能更改。

我们如果频繁的改变字符串对象,就会产生多个对象,我们就需要
用字符串缓冲区类( StringBuffer,StringBuilder )来代替字符串实现该需求。
char charAt(int index) : 返回指定索引处的 char 值。 

int compareTo(String anotherString) :按字典顺序比较两个字符串。 int
compareToIgnoreCase(String str) :按字典顺序比较两个字符串,不考虑大小写。 int length()
:返回此字符串的长度。 static String format(String format, Object… args)
:使用指定的格式字符串和参数返回一个格式化字符串。 格式化字符串的。 int indexOf(String str) :
返回指定子字符串在此字符串中第一次出现处的索引。 如果不在源字符串中,就返回-1 int lastIndexOf(String str)
:返回指定子字符串在此字符串中最右边出现处的索引。 boolean matches(String regex)
:告知此字符串是否匹配给定的正则表达式。 可以用来做验证。 String replace(CharSequence target,
CharSequence replacement) :使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
全部都替换 String replaceAll(String regex, String replacement) :使用给定的
replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 String replaceFirst(String
regex, String replacement) 使用给定的 replacement
替换此字符串匹配给定的正则表达式的第一个子字符串。 String[] split(String regex)
根据给定正则表达式的匹配拆分此字符串。拆分成一个数组。 boolean endsWith(String suffix)
测试此字符串是否以指定的后缀结束。 boolean startsWith(String prefix)
测试此字符串是否以指定的前缀开始。 String substring(int beginIndex)
返回一个新的字符串,它是此字符串的一个子字符串。 String substring(int beginIndex, int endIndex)
返回一个新字符串,它是此字符串的一个子字符串。
开始索引位置,( 开始的索引位置 + 截取的个数 ) char[] toCharArray()
将此字符串转换为一个新的字符数组。 String toLowerCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 String toUpperCase()
使用默认语言环境的规则将此 String 中的所有字符都转换为大写 String trim()
返回字符串的副本,忽略前导空白和尾部空白。 static String valueOf(XX b)
返回 XX 参数的字符串表示形式。 代表若干类型,比如int,byte等等。

1.写一个方法,比较一个字符串是否为整数

package com.xinyisu.study;
//写一个方法,比较一个字符串是否为整数
public class T02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		boolean bln = isInteger("123A");
		
		System.out.println(bln);
		
		System.out.println("..........");
		
		if(bln ==true) {
			System.out.println("是整数");
		}else {
			System.out.println("不是整数");
		}
		
	}
	
	public static boolean isInteger(String str) {
		//0.
		//1.取第一个字符,判断第一个字符是-还是0-9的数字
		//1.1如果不是-/0-9则继续下去,返回false
		char first =str.charAt(0);
		if(!(first =='-' || first >=48  && first <=57)) {
			return false;
		}
		
		//2.0  是"-",这个字符串就要大于等于2位
		if(!(first == '-')) {
			if(str.length()>=2) {
				return false;
			}
		}
		
		//2.循环,从字符序列的索引的第一位开始循环,一直循环到字符串的结束
		//2.1在循环的过程中,判断是否是0-9的数字,如果不是返回false
		for (int i = 1; i < str.length(); i++) {
			if(!(str.charAt(i)>=48 && str.charAt(i)<=57)) {
				return false;
			}
		}
		
		//3返回值
		return true;		
		
		
	}

}

2.如何格式化

package com.xinyisu.study;
//如何格式化
//字符串的学习
public class T03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String tname = "张三";
		String job = "教师";
		//要格式化
		double salary = 32687.32789;
		
		//参数的引用10代表宽度,。10代表精度
		String result = String.format("%s是%10s,工资是%.2f",tname,job,salary);
		System.out.println(result);
		
		String ss = "ABCD";
		String aa = "BC";
		int m = ss.indexOf(aa);
		System.out.println(m);
		int m1 = ss.lastIndexOf(aa);
		System.out.println(m1);
		
		System.out.println("........");
		
		
	}

}


3.正则表达式

package com.xinyisu.study;
//正则表达式
//match可以用来做验证
public class T04 {

	public static void main(String[] args) {
		// 验证字符串是不是手机号
		String str= "1306401121";
		//[]里面是出现什么,{}代表共出现多少次
		//可做查找
		boolean bln =str.matches("[0-9]{11}");
		//  "\\"代表要输出数字,上面和下面一个意思
		boolean bln1 =str.matches("\\d{11}");
		System.out.println(bln);
		System.out.println(bln1);
		
		System.out.println(".........");
		
		String str1 = "AVB11";
		//替换
		//指定的数字全部替换
		String temp = str1.replace("11", "zz");
		System.out.println(temp);
		
		System.out.println(".........");
		
		//替换全部
		//将所有的数字替换为张三
		//更加强调符合正则表达式的第一个字符串
		String  str2 = "13FDDdg7777gdgj杨玉环";
		String temp2 = str2.replaceAll("[0-9]", "张三");
		System.out.println(temp2);
		
		System.out.println(".........");
		
		String str3 = "杨玉环;杨国忠;李隆基;李白;高力士";
		String[] temps = str3.split(";");
		for (String string : temps) {
			System.out.println(string);
		
		System.out.println(".........");
		
		String str4 = "张三李四王五";
		//开始的索引位置,结束的索引位置
		//结束的索引位置为开始加结束的
		temp = str4.substring(2,4);
		System.out.println(temp);
		
		System.out.println(".........");
		
		String str5 = "           张三李四王五    ";
		//前导空白和尾部空白
		System.out.println(str5.trim()+"....");
				
	}
	}
}

4.StringBuilder

StringBuffer:线程安全的。效率比较低。
在这个类里面几乎所有的方法都添加了同步关键字。
C/S 程序 比较常用。
StringBuilder:线程不安全的。效率比较高。
在这个类里面没有任何方法被同步关键字。
JAVAWEB程序 比较常用。

常用方法:T代表各种数据类型 StringBuilder append(T s) :向此 Appendable 添加指定的数据。
StringBuilder delete(int start, int end) : Removes the data in a
substring of this sequence.

package com.xinyisu.study;

public class T05 {

	public static void main(String[] args) {
		StringBuilder sb = new StringBuilder("ABC");
		sb.append(true);
		sb.append(2.3);
		sb.append("刘德凯");
		
		System.out.println( sb.toString() );
		sb.delete(10, 13);
		System.out.println(sb.toString());
		
		sb.insert(2, "李登辉");
		System.out.println(sb.toString());
		
		
	}

}

2.日期类

Date类: Date : 精确到毫秒 , 里面的方法大部分都过时了,他就为了表示日期。 Date(long date) : 分配
Date 对象并初始化此对象, 以表示自从标准基准时间(称为“历元(epoch)”, 即 1970 年 1 月 1 日 00:00:00
GMT)以来的指定毫秒数。 Date():可以得到 系统当前时间
Calendar:日历盒类
是一个抽象类,他有一个已知实现子类:GregorianCalendar
我们想得到日历盒类的实例,如下方法:
Calendar cal = new GregorianCalendar();
Calendar cal = Calendar.getInstance();

void set(int field, int value)
将给定的日历字段设置为给定值。 void set(int year, int month, int date)
设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。 void set(int year, int month, int date, int hourOfDay, int minute)
设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。 void set(int year, int month, int date, int hourOfDay, int minute, int
second)
设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。 Date getTime()
返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。

int get(int field) : 返回给定日历字段的值。 备注:在java里面,月份从0开始。

package com.xinyisu.study;
//日期类,在java.util
//精确到毫秒
//构造函数 Date()
//Date(long date) :
//setTime,getTime
import java.util.Date;
import java.util.Calendar;
public class T01 {

	public static void main(String[] args) {
		//抽象类不能被直接实例化
		Date d= new Date();
		Date d1;
		//		System.out.println(d);
		//日历盒类是一个抽象类
		
		//getinstance是一个抽象下的子类
		Calendar cal = Calendar.getInstance();
		System.out.println(cal);

		//java里面,月份从0开始
		cal.set(2020, 6, 6);		
		d = cal.getTime();
		System.out.println(cal.getTime().toLocaleString());
	
		cal.set(Calendar.MONTH, 2);
		d1 = cal.getTime();
		System.out.println(cal.getTime().toLocaleString());
	}

}

package com.xinyisu.study;
import java.text.DateFormat;
import java.util.*;
import java.text.SimpleDateFormat;
public class T02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
		Date date = new Date();
		Calendar cal1 = Calendar.getInstance();
		cal1.set(Calendar.MONTH, 12);
		cal1.set(Calendar.DAY_OF_YEAR, 10);
		date = cal1.getTime();
		System.out.println(date.toLocaleString());
	
	}

}


package com.xinyisu.study;
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class T03 {
    public static void main(String[] args) {
    	Student stu = new Student();
    	stu.display(Student.BIG_STUDENT);
       
    }
}


class Student{
	public static int BIG_STUDENT =1;
	public static int MID_STUDENT =2;
	public static int SMALL_STUDENT =3;
	
	public void display(int flag) {
		if(flag==1) {
			System.out.println("大学生");
		}else if(flag ==2) {
			System.out.println("中学生");
		}else if(flag ==3) {
			System.out.println("小学生");
		}
	}

}

package com.xinyisu.study;

import java.util.Calendar;

//2003/6/6 输出如下格式年月日。。。。
public class T04 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Calendar cal = Calendar.getInstance();
		cal.set(2003, 5, 7);
		int year = cal.get(Calendar.YEAR);
		int month = cal.get(Calendar.MONTH);
		int day = cal.get(Calendar.DAY_OF_MONTH);
		String temp = String.format("%s年%s月%s日",year,month,day);
		System.out.println(temp);
	}

}

5.日期的格式化与日期的转换

package com.xinyisu.study;
//日期的格式化与日期的转换
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class T05 {

	public static void main(String[] args) throws ParseException {
		// TODO Auto-generated method stub
		Date d = new Date();
		SimpleDateFormat temp = new SimpleDateFormat("yyyy年MM月dd日 E");
		String t = temp.format(d);
		System.out.println(t);
		
		System.out.println(".........");
		
		String t1 = "2003年6月7日";
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy年MM月dd日");
		Date d1 = sdf1.parse(t1);
		System.out.println(d1.toLocaleString());
		
		
		
		
	}

}

6.随机类

package com.xinyisu.study;

import java.util.Random;

//随机类 random
public class T06 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Random random = new Random();
		//[0,1000)
		int temp = random.nextInt(1000);
		System.out.println(temp);
		
		//[0,1)
		double db1 = random.nextDouble();
		System.out.println(db1);
	}

}

3.Calendar类

Calendar:日历盒类 ,抽象类。 Calendar cal = new GregorianCalendar(); Calendar
rightNow = Calendar.getInstance(); // 其他语言环境敏感类

下面是给日历盒设置日期时间的 void set(int field, int value)
将给定的日历字段设置为给定值。 void set(int year, int month, int date)
设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。 void set(int year, int month, int date, int hourOfDay, int minute)
设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。 void set(int year, int month, int date, int hourOfDay, int minute, int
second)
设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。

1.小明在2008年03月04日 出生,请问356天后,是那年哪月那日

package com.xinyisu.study;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
//小明在2008年03月04日 出生,请问356天后,是那年哪月那日
public class T01 {
    public static void main(String[] args) throws ParseException {
    	//指定要格式化的格式
        DateFormat date = new SimpleDateFormat("yyyy年MM月dd日");
        Calendar calendar = Calendar.getInstance();
        calendar.set(2018, 2, 4);
        calendar.add(Calendar.DAY_OF_YEAR, 356);
        System.out.println(date.format(calendar.getTime()));

        //将字符串类转换为日期类
        
        String str2 = "2003哈哈02嘻嘻03花花";
        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy哈哈MM嘻嘻dd花花");
        Date d1 = sdf1.parse(str2);
        System.out.println(d1.toLocaleString());
    
    }
}



4.math类

1.平方,四舍五入

package com.xinyisu.study;

public class T04 {

	public static void main(String[] args) {
		// 2的3次方
		double m = Math.pow(2.2, 3);
		System.out.println(m);
		
		//[0,1)
		double d = Math.random();
		System.out.println(d);
		
		//四舍五入
		long l =Math.round(2.567);
		System.out.println(l);
		
		System.out.println(Math.sqrt(3));
	}
	


}

2.通过构造函数字符串转成整形,数字转换为字符串

package com.xinyisu.study;

public class T05 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//通过构造函数字符串转成整形
		double i = new Integer("-1");
		System.out.println(i);
		
		//通过加空字符串,将数字转换为字符串
		int m = 5;
		System.out.println(m +"");
		
		i= Double.parseDouble("-9.8");
		System.out.println(i+1);
		
		
		
	}

}

3.对超出计算机的运算范围,比如两个超级大的数据相加

BigInteger:对超出范围的整数运算 在java.math包里面 BigDecimal:对超出范围的小数运算

package com.xinyisu.study;

import java.math.BigDecimal;
import java.math.BigInteger;

//对超出计算机的运算范围,比如两个超级大的数据相加
public class T06 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		BigInteger b1 = new BigInteger("11111111111111111111111111");
		BigInteger b2 = new BigInteger("11111111111111111111111111");
		BigInteger result = b1.add(b2);
		System.out.println(result.toString());
		
		BigDecimal c1 = new BigDecimal("11111111111111111111111111.46");
		BigDecimal c2 = new BigDecimal("11111111111111111111111111.54");
		BigDecimal cresult = c1.add(c2);
		System.out.println(cresult.toString());
	}

}

4.数组

//arrays:数组辅助类,里面不存储数据,提供了排序,查找等辅助功能
//array:数组,存储数据,是数据的集合

package com.xinyisu.study;

import java.util.Arrays;

//arrays:数组辅助类,里面不存储数据,提供了排序,查找等辅助功能
//array:数组,存储数据,是数据的集合
public class T07 {

	public static void main(String[] args) {
		//二分法必须有序
		//如果找不到,就是-(插入点)-1
		int[] ints = {12,56,89,90,100};
		int num = Arrays.binarySearch(ints, 57);
		System.out.println(num);

	}

}

2.排序

package com.xinyisu.study;

import java.util.Arrays;

public class T08 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		int[] ints = {1,4,7,5,9,2};
		//排序
		Arrays.sort(ints);
		
		for (int i : ints) {
			System.out.println(i);
		}
	}

}



3.泛型,通用类型

static void sort(T[] a, Comparator c):
根据指定比较器产生的顺序对指定对象数组进行排序。 泛型:任意类型(排除基本数据类型)
如果你非要用泛型方法,实现基本数据类型排序,就用基本数据类型的包装类型。 优点: 有效避免了装箱和拆箱的操作。
装箱和拆箱会导致效率降低,类型转换的过程中可能会产生转换异常。 使用泛型效率更高,类型更安全。

static void sort(T[] a, Comparator c)
根据指定比较器产生的顺序对指定对象数组进行排序。 T:泛型,任意类型(排除基本数据类型) 我们如果想实现对象数组的排序,我们需要利用该方法。 第二个参数特别注意:我们需要声明一个类,实现该接口。
在该接口里面实现比较的规则。

package com.xinyisu.study;

import java.util.Arrays;
import java.util.Comparator;

//泛型,通用类型
public class T09 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student[] students = new Student[5];
		students[0] = new Student("1001", "赵丽颖", 2002, 12, 15, false);
		students[1] = new Student("1002", "郑爽", 2001, 11, 25, false);
		students[2] = new Student("1003", "倪妮", 2005, 2, 8, false);
		students[3] = new Student("1004", "宋祖儿", 2005, 5, 14, false);
		students[4] = new Student("1005", "杨洋", 1999, 4, 16, true);

		// 学生的年月日进行排序
		T09 t09 = new T09();
		Arrays.sort(students, t09.new MyComparator());

		for (Student student : students) {
			System.out.println(student.toString());
		}
	}

	class MyComparator implements Comparator<Student> {
		public int compare(Student o1, Student o2) {
			if (o1.getStudentYear() != o2.getStudentYear()) {
				return o2.getStudentYear() - o1.getStudentYear();
			} else {
				if (o1.getStudentMonth() != o2.getStudentYear()) {
					return o2.getStudentMonth() - o1.getStudentMonth();
				} else {
					return o2.getStudentDay() - o1.getStudentDay();
				}
			}
		}

	}
}

class Student {
	// 学生属性为:学号,姓名,出生年,出生月,出生日,性别
	private String studentId;
	private String studentName;
	private int studentYear;
	private int studentMonth;
	private int studentDay;
	private boolean studentSex;

	public String getStudentId() {
		return studentId;
	}

	public void setStudentId(String studentId) {
		this.studentId = studentId;
	}

	public String getStudentName() {
		return studentName;
	}

	public void setStudentName(String studentName) {
		this.studentName = studentName;
	}

	public int getStudentYear() {
		return studentYear;
	}

	public void setStudentYear(int studentYear) {
		this.studentYear = studentYear;
	}

	public int getStudentMonth() {
		return studentMonth;
	}

	public void setStudentMonth(int studentMonth) {
		this.studentMonth = studentMonth;
	}

	public int getStudentDay() {
		return studentDay;
	}

	public void setStudentDay(int studentDay) {
		this.studentDay = studentDay;
	}

	public boolean isStudentSex() {
		return studentSex;
	}

	public void setStudentSex(boolean studentSex) {
		this.studentSex = studentSex;
	}

	public Student() {
	}

	public Student(String studentId, String studentName, int studentYear, int studentMonth, int studentDay,
			boolean studentSex) {
		this.studentId = studentId;
		this.studentName = studentName;
		this.studentYear = studentYear;
		this.studentMonth = studentMonth;
		this.studentDay = studentDay;
		this.studentSex = studentSex;
	}

	@Override
	public String toString() {
		return "Student [studentId=" + studentId + ", studentName=" + studentName + ", studentYear=" + studentYear
				+ ", studentMonth=" + studentMonth + ", studentDay=" + studentDay + ", studentSex=" + studentSex + "]";
	}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值