面向对象的应用
字符串的创建
直接写字符串创建字符串对象,该字符串会在数据段的字符串常量池中产生对象。
- String str1 = “Hello”;
使用连接符(+)创建字符串对象,字符串可以连接任何其它数据。
-
String str2 = “Hello”+23+23;//“Hello2323”
-
String str3 = 23+23+“World"+true;//“46Worldtrue”
使用new创建字符串对象
- String str4 = new String(“小明”);
package cn.iceson;
public class StringDemo {
public static void main(String[] args) {
//直接赋值,会在字符串常量池中产生对象
String str1="abc";
//使用字符串连接符创建,实际上是通过StringBuffer或StringBuilder来构建对象
String str2=true+"abc"+123;
//使用new关键字创建字符串对象
String str3=new String("aaa");
}
}
String类常用方法
-
public int length();//得到长度
-
public char charAt(int index);//根据下标得到字符
-
public int indexOf(String str);//根据字符得到下标
-
public String substring(int beginIndex, int endIndex);//截取子字符串
-
public String trim();//去掉前后空格
-
public int compareTo(String anotherString);//比较字符串大小
-
public boolean endsWith(String suffix); //判断是否以指定字符串结尾
-
public String[] split(String regex);//根据正则表达式拆分字符串
-
public replace(char oldChar, char newChar);//替换字符串
-
public replaceAll(String regex, String replacement);
-
public boolean equal(Object obj);//判断字符串是否相等
package cn.iceson2;
public class StringDemo {
public void m1(){
String str1=" hello world!";
System.out.println("字符串的长度:"+str1.length());//得到字符串的长度
System.out.println("下标为4的字符:"+str1.charAt(4));//根据下标得到字符
System.out.println("字符w的下标:"+str1.indexOf('w'));//获取字符在字符串中第一次出现的下标
System.out.println("截取字符串:"+str1.substring(1, 3));截取子字符串[1,3)
System.out.println("去掉前后空格:"+str1.trim());//去掉前后空格
System.out.println("未去掉前后空格:"+str1);
String str2="hfrgg";
/**
* 如果String对象按字典顺序排列在参数字符串之前,结果为负整数。 结果是一个正整数,
* 如果String对象按字典顺序跟随参数字符串。
* 如果字符串相等,结果为零; compareTo返回0 ,当equals(Object)方法将返回true 。
*/
System.out.println("比较字符串大小:"+"awdsd".compareTo("b"));
System.out.println("判断是否以指定字符串结尾:"+str1.endsWith("d!"));
System.out.println("根据正则表达式拆分字符串:"+str1.split(str2));
System.out.println("替换字符串:"+str1.replace("hello ", "你好,"));
System.out.println("替换所有字符:"+str1.replaceAll(" ", "222"));
System.out.println(str1.equals(str2));
}
public void m2(){
String str="abc hello world I am Java";
System.out.println(str.split(","));
String[] str2=str.split(" ");
for (String string : str2) {
System.out.println(string);
}
}
public static void main(String[] args) {
new StringDemo().m2();
}
}
StringBuffer与StringBuilder
StringBuffer与StringBuilder的方法都是一样的,都是用于构造字符串
StringBuffer与StringBuilder的区别:StringBuffer是线程安全的,StringBuilder是线程不安全的,所以性能高于
StringBuffer.
package cn.iceson;
public class Test {
public static void main(String[] args) {
//创建一个字符串缓冲序列对象,默认16个字符大小的空间
StringBuffer buffer=new StringBuffer();
// StringBuilder builder=new StringBuilder();
//append在末尾追加字符串
buffer.append(true);
buffer.append('A');
buffer.append(123);
buffer.append("good 我胡汉三然后就反复活跃的");
//insert根据下标添加字符串,指定的位置必须是字符串中已有的位置或字符串末尾的位置。
buffer.insert(16, 23);
System.out.println(buffer);
//导致该字符序列被序列的相反代替。
System.out.println(buffer.reverse());
}
}
==和equals()
==用于比较地址,equals)用于比较内容
equals()是Object类中的方法,子类可重写
String中重写了equals方法,用于比较字符串内容
package cn.iceson2;
public class Test {
public static void main(String[] args) {
/**
* 比较字符串是否相等
* ==比较的是地址 equals比较的是内容
*/
String s1="abc";
String s2="abc";
String s3=new String("abc");
String s4=new String("abc");
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s2==s3:"+(s2==s3));
System.out.println("s3==s4:"+(s3==s4));
boolean b1=s1.equals(s2);
System.out.println("b1----"+b1);
boolean b2=s2.equals(s3);
System.out.println("b2----"+b2);
boolean b3=s3.equals(s4);
System.out.println("b3----"+b3);
}
}
Math类
不能创建Math类对象,因为构造方法被private修饰( public修饰的构造方法在任何地方都可以被触发,而private
修饰的构造方法只能在当前类中触发)
Math类中所有的成员都是类成员,使用时直接使用类名点访问,详见原代码或帮助文档。
最常用的方法只有一个public static double random();该类方法返回大于或等于0.OD,小于1.0之间的随机数。
package cn.iceson;
public class MathDemo {
public static void main(String[] args) {
System.out.println(Math.abs(-22));
System.out.println(getType(Math.pow(2, 3)));//java.lang.Double
double d1=Math.random();//获取0~1之间的随机数
System.out.println(d1);
int d2=(int) (Math.random()*10);
System.out.println(d2);
}
public static String getType(Object obj) {
return obj.getClass().getName();
}
}
Random
用于取得随机值
示例︰创建Random对象,得到随机boolean值,得到随机整数,得到大于等0,小于10的整数。
public void m1(){
Random r=new Random();
boolean b=r.nextBoolean();//得到随机的布尔值
int i=r.nextInt();//得到随机的整型数据
int j=r.nextInt(10);//得到随机整数 j>=0 & j<10
System.out.println("布尔类型:"+b);
System.out.println("整数类型:"+i);
System.out.println("j>=0 & j<10范围整数类型:"+j);
}
/**
* 使用种子创建Random对象,无论程序运行多少次,得到的都是同一个随机值
* 使用同一个种子创建Random对象时,如果获取随机数的顺序相同,那么得到的随机值还是一样的
*/
public static void m2(){
Random r=new Random(10);
boolean b=r.nextBoolean();
int i=r.nextInt();
int j=r.nextInt(10);
System.out.println("b="+b);
System.out.println("i="+i);
System.out.println("j="+j);
}
/**
* 使用当前时间的毫秒值作为种子,那么这个种子是唯一的,获得的随机数总是不同的。
*/
public static void m3(){
Random r=new Random(System.currentTimeMillis());
boolean b=r.nextBoolean();
int i=r.nextInt();
int j=r.nextInt(10);
System.out.println("b="+b);
System.out.println("i="+i);
System.out.println("j="+j);
}
System
System.out.println()∶标准输出语句
System.out.print()与前面类似,只是不换行
System.exit(0);退出程序
System.currentTimeMillis();返回从1970年1月1号0点0分0秒O毫秒到现在为至的毫秒数
package cn.iceson3;
import java.io.InputStream;
import java.io.PrintStream;
public class SystemDemo {
public static void main(String[] args) {
PrintStream out=System.out;//类名
out.print("abc");//对象
//第一个.表示类名.,第二个.表示对象.。
System.out.println("换行输出");
System.out.print("不换行输出 ");
InputStream in=System.in;
System.out.println(in);
System.out.println(System.currentTimeMillis());
System.exit(0);
System.out.println("不会被打印的语句");
}
}
Date
Date对象用于封装时间
使用当前时间初始化Date对象· Date()
使用用指定时间初始化Date对象
-
Date(int year, int month, int date)
-
Date(int year, int month, int date, int hrs, int min)
-
Date(int year, int month, int date, int hrs, int min, int sec).Date(long date)
使用当前时间初始化新建的Date对象,并取出年月日星期几点分秒
package cn.iceson4;
import java.util.Date;
public class DateDemo {
public static void main(String[] args) {
//以指定时间创建对象
Date date=new Date(2021, 5, 30, 21, 31, 59);
//以当前时间创建对象
Date date2=new Date();
System.out.println(date.getYear());//年份+1900
System.out.println(date.getMonth());//月份从零开始算
System.out.println(date.getDate());//号数,一个月中的第几天
System.out.println(date2.getDay());//一个星期的第几天,以星期天为0开始算
System.out.println(date.getHours());//小时
System.out.println(date.getMinutes());//分钟
System.out.println(date.getSeconds());//秒
System.out.println(date2.getTimezoneOffset());//得到时区,东为负,西为正,北京为东八区
}
}
通过Calendar还可以得到Date对象,示例
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
Date对象中封装的时间可被改变,使用setX()方法即可
public static void m1(){
Date date=new Date();
date.setDate(21);//号数,一个月中的第几天
date.setYear(200);
System.out.println(date.getDate());//21号
System.out.println(date.getYear());//(200+1900)年
}
Calender
Calender也是用于操作时间,大部分情况下使用Calender替换Date
Calender的创建
-Calendar calendar = Calendar.ggtInstance();得到时间
- int year = calendar.get(Calendar.YEAR);//显示年份
- int month = calendar.get(Calendar.MONTH);//显示月份(从0开始,
实际显示要加─) - int day_of_year = calendar.get(Calendar.DAY_OF_YEAR);//今年的
第N天 - int day_of_month = calendar.get(Calendar.DAY_OF_MONTH);//本月第N天
- int hour_of_day = calendar.get(Calendar.HOUR_OF_DAY);//二十四小时制
- int minute = calendar.get(Calendar.MINUTE);//当前分钟数
package cn.iceson;
import java.util.Calendar;
public class Test {
public static void main(String[] args) {
Calendar calendar=Calendar.getInstance();
int year=calendar.get(Calendar.YEAR);//得到年
System.out.println(year);
//得到月,从0开始算
int month=calendar.get(Calendar.MONTH);
System.out.println(month);
int day1=calendar.get(Calendar.DATE);//表示一个月中的第几天
int day2=calendar.get(Calendar.DAY_OF_MONTH);//表示一个月中的第几天
int day3=calendar.get(Calendar.DAY_OF_WEEK);//表示一个星期中的第几天
int day4=calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);//表示一个月中的第几周
int day5=calendar.get(Calendar.DAY_OF_YEAR);//表示一年中的第几天
System.out.println("day1:"+day1);
System.out.println("day2:"+day2);
System.out.println("day3:"+day3);
System.out.println("day4:"+day4);
System.out.println("day5:"+day5);
int hour1=calendar.get(Calendar.HOUR);//十二小时制
int hour2=calendar.get(Calendar.HOUR_OF_DAY);//二十四小时制
System.out.println("hour1:"+hour1);
System.out.println("hour2:"+hour2);
int minute = calendar.get(Calendar.MINUTE);
System.out.println("minute--"+minute);
}
}
修改calendar封装的时间
- calendar.add(Calendar.HOUR_OF_DAY,3);//3小时以后
- calendar.add(Calendar.MINUTE,15);//15分钟以后
- calendar.add(Calendar.MINUTE,-30);// 30分钟前
- calendarsetTime(new Date());//使用Date对象重置时间
SimpleDateFormat
可以对Date对象格式化后得到格式规定的字符串时间表示
-
1 )yyyy表示年
-
2 ) dd表示日
-
3 ) hh表示时
-
4 ) ss表示秒
-
5)MM与yyyy、 dd在一起表示月;mm与hh、ss在一起表示分
package cn.iceson;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date=new Date();//以当前时间创建对象
//创建对象,参数表示需要显示的时间格式
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
//将Date对象进行格式化
String time=simpleDateFormat.format(date);
System.out.println(time);//例如:2021/06/01 04:55:50
}
}
作业:1、根据以下提供的字符串内容,将字符串中包含的数字取出。
temp20light150lxhum80%end
package cn.iceson2;
public class Test {
public static void m1(String str){
StringBuffer bfBuffer=new StringBuffer();
for (int i = 0; i < str.length(); i++) {
if ((int)(str.charAt(i))>=48&&(int)(str.charAt(i))<=57) {
bfBuffer.append(str.charAt(i));
}
}
System.out.println(bfBuffer);
}
public static void main(String[] args) {
Test.m1("temp20light150lxhum80%end");
}
}