1.格式化输出
在输出多个字符时,一般用“+”连接,如果变量较多,拼接就会变得很繁琐。当使用格式化输出时,就能非常简洁的表示。
%s表示字符串,%d表示数字,%n换行。
e . g .
String name="锤子";
int strike=5;
String item="人";
//非格式化输出
String sentence=name+"袭击了"+strike+"个"+item;
System.out.println(sentence);
//注意此处是println()
//格式化输出
String sentenceFormat="%s袭击了%d个%s%n";
//此处是printf(指定输出语句,第一个格式化输出符号,第二个,第三个)
System.out.printf(sentenceFormat,name,strike,item);
//printf和format达到的效果是一致的,用printf()时调用了format()
System.out.format(sentenceFormat,name,strike,item);
2.其他常用的格式化方法
int year = 2020;
//总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达
//直接打印数字
System.out.format("%d%n",year);
//总长度是8,默认右对齐
System.out.format("%8d%n",year);
//总长度是8,左对齐
System.out.format("%-8d%n",year);
//总长度是8,不够补0
System.out.format("%08d%n",year);
//千位分隔符
System.out.format("%,8d%n",year*10000);
//小数点位数
System.out.format("%.2f%n",Math.PI);
//不同国家的千位分隔符
System.out.format(Locale.FRANCE,"%,.2f%n",Math.PI*10000);
System.out.format(Locale.US,"%,.2f%n",Math.PI*10000);
System.out.format(Locale.UK,"%,.2f%n",Math.PI*10000);
3.字符
保存一个字符时使用char。char对应的封装类是Character。
Character中的常见方法举例:
//不能把字符直接转换为字符串,下面这种会报错
//String a='a';
String str=Character.toString('a');
System.out.println(str);
//以下所有方法只能转换一个字符,不能转换字符串
//判断字符是否为字母,返回布尔类型,char型用单引号
System.out.println(Character.isLetter('3'));
System.out.println(Character.isLetter('a'));
//判断是否为数字
System.out.println(Character.isDigit('3'));
System.out.println(Character.isDigit('a'));
//判断是否为空白
System.out.println(Character.isWhitespace('a'));
System.out.println(Character.isWhitespace('5'));
System.out.println(Character.isWhitespace(' '));
//判断是否大写
System.out.println(Character.isUpperCase('A'));
System.out.println(Character.isUpperCase('x'));
System.out.println(Character.isUpperCase('5'));
//判断是否小写
System.out.println(Character.isLowerCase('A'));
System.out.println(Character.isLowerCase('x'));
System.out.println(Character.isLowerCase('6'));
//字符转换为小写
System.out.println(Character.toLowerCase('A'));
//如果是数字转换为大小写,那么转换之后还是数字本身
System.out.println(Character.toLowerCase('5'));
System.out.println(Character.toLowerCase('a'));
//字符转换为大写
System.out.println(Character.toUpperCase('A'));
System.out.println(Character.toUpperCase('a'));
System.out.println(Character.toUpperCase('5'));
4.常见转义
①
System.out.println("使用一个空格不能达到右对齐效果");
System.out.println("abc def");
System.out.println("ab def");
System.out.println("a def");
System.out.println("a def");
②
//转义字符要再加一个\才能正常显示
System.out.println("使用\\t制表符能达到右对齐效果");
System.out.println("abc\tdef");
System.out.println("ab\tdef");
System.out.println("a\tdef");
③
System.out.println("一个\\t制表符的长度展示");
System.out.println("12345678对齐");
System.out.println("\t对齐");
④
System.out.println("换行符\\n的作用效果");
System.out.println("哈哈\n嘿嘿");
⑤
System.out.println("单引号 \\'");
System.out.println("\'abc\'def");
⑥
//显示双引号转义字符前要加两个\\,否则将会报错(编译器认为少了一个双引号)
System.out.println("双引号\\\"");
System.out.println("\"哈哈\"嘿嘿");
⑦
System.out.println("反斜杠本身\\");
System.out.println("哈哈哈哈\\");
5、字符串
字符串即字符的组合。在Java中字符串是一个类,因此我们所见到的字符串都是对象。
常见创建字符串手段:
1.每当有一个字面值出现的时候,虚拟机会自动创建一个字符串。
2.调用String的构造方法创建一个字符串对象。
3.通过+加号进行字符串拼接也会创建新的字符串对象。
String garen ="盖伦"; //字面值,虚拟机碰到字面值就会创建一个字符串对象
String teemo = new String("提莫"); //创建了两个字符串对象
char[] cs = new char[]{'崔','斯','特'};
String hero = new String(cs);//通过字符数组创建一个字符串对象
String hero3 = garen + teemo;//通过+加号进行字符串拼接
注:String类被默认修饰为final,所以是不能被继承的。字符串对象默认是immutable的,里面的内容永远不能改变。
6.操纵字符串
关键字 | 简介 |
---|---|
charAt | 获取字符 |
toCharArray | 获取对应的字符数组 |
subString | 截取字符串 |
split | 分隔 |
trim | 去掉首尾空格 |
toLowerCase/toUpperCase | 大小写 |
indexOf/lastIndexOf/contains | 定位 |
replaceAll/replaceFirst | 替换 |
7.比较字符串(DAY 6\Object类)
①“==”判断引用指向是否为同一个对象
String str1 = "the light";
String str2 = new String(str1);
//==用于判断是否是同一个字符串对象
System.out.println( str1 == str2);
很明显,上所示示例代码中str1和str2并不是同一个字符串对象。一般来说,编译器每碰到一个字符串的字面值就会创建一个新的对象。且如上所示str2虽然内容和str1相同,但指向的是new出来的另一个对象。
String str1 = "the light";
String str3 = "the light";
System.out.println( str1 == str3);
上所示为特例,编译器在遇到字面值str1以后,创建了一个字符串对象(the light)。在下一行,编译器发现str3这个字面值的内容已经存在了,所以str3就会指向该内容的对象。所以str1和str3的对象是同一个。
②“equals()”判断字符串内容是否相同
String str1 = "the light";
String str2 = new String(str1);
String str3 = str1.toUpperCase();
//==用于判断是否是同一个字符串对象
System.out.println( str1 == str2);
System.out.println(str1.equals(str2));//完全一样返回true
System.out.println(str1.equals(str3));//大小写不一样,返回false
System.out.println(str1.equalsIgnoreCase(str3));//忽略大小写的比较,返回true
③判断是否以子字符串开始或者结束
String str1 = "the light";
String start = "the";
String end = "Ight";
System.out.println(str1.startsWith(start));//以...开始
System.out.println(str1.endsWith(end));//以...结束
8. StringBuffer
StringBuffer是可变长的字符串。
①关键字append
//关键字append的使用
String str1="let there be";
//根据str1创建一个StringBuffer对象
StringBuffer sb1=new StringBuffer(str1);
//在sb1指向的对象后追加字符串
sb1.append(" light");
System.out.println(sb1);
②关键字delete
//删除字符串
sb1.delete(4, 10);//删除位置4至10的字符串
System.out.println(sb1);
③关键字insert
//插入字符串
sb1.insert(4, "there");//在位置4插入字符串there
System.out.println(sb1);
④关键字reverse
//反转字符串
sb1.reverse();//原字符串由尾到头进行反转
System.out.println(sb1);
为什么StringBuffer可以改变长度?
和String内部是一个字符数组一样,StringBuffer也维护了一个字符数组。但是这个数组留有冗余长度。
//StringBuffer长度和容量
String str2="Hi";
StringBuffer sb2=new StringBuffer(str2);
System.out.println(sb2.length());
System.out.println(sb2.capacity());
9.日期 Date
在使用Date类时,要先导入java.util.Date。
①时间原点
所有的数据类型,不管是整数、布尔、浮点或是字符串,最后都需要以数字的形式表现出来。日期类型也不理例外。在日期类型中0代表的数字即Java中的时间原点,其对应的日期时1970年01月01日08点00分00秒。所有的日期都是以这个0点为基准,每过一毫秒就加一。
②创建日期对象
Date d1=new Date();//不加参数为当前时间
System.out.println("当前时间:");
System.out.println(d1);
// 从1970年1月1日 早上8点0分0秒 开始经历的毫秒数
Date d2 = new Date(5000);
System.out.println("从1970年1月1日 早上8点0分0秒 开始经历了5秒的时间");
System.out.println(d2);
③ getTime
getTime()得到的时一个long型的整数。
这个整数代表从1970年1月1日 早上8点0分0秒开始,每经过一毫秒,增加1。直接打印对象,会看到“Fri Nov 26 09:14:53 CST 2021”。
④System.currentTimeMillis()
该方法用于读取当前时间的毫秒数。
new Date().getTime()和System.currentTimeMillis()是相同的。但由于机器性能原因,两者打印出的结果不会相同,因为执行代码也需要时间。
10.日期格式化
①日期转字符串
-
y 代表年
-
M 代表月
-
d 代表日
-
H 代表24进制的小时
-
h 代表12进制的小时
-
m 代表分钟
-
s 代表秒
-
S 代表毫秒
//先import java.text.SimpleDateFormat SimpleDateFormat sdf=new SimpleDateFormat(); //创建日期对象 Date d=new Date(); //格式化日期对象并转换成字符串 String str=sdf.format(d); //输出 System.out.println(str);
SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
Date d2=new Date();
String str2=sdf2.format(d2);
System.out.println(str2);
②字符串转日期
格式(yyyy/MM/dd HH:mm:ss)需要和字符串格式保持一致,如果不一样就会抛出解析异常ParseException。
SimpleDateFormat sdf3=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str3="2021-11-29 14:14:14";//注意连接符号要与上面一致
try {
Date d3=sdf3.parse(str3);
System.out.format("字符串%s通过转换为日期对象:%s",str3,d3.toString());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
11. Calendar
Calendar类即日历类,常用于进行”翻日历“,比如说下个月的今天是多久
①Calendar与Date进行互相转换
采用单例模式获取日历对象Calendar.getInstance();
//采用单例模式获取日历对象Calendar.getInstance();
Calendar c = Calendar.getInstance();
//通过日历对象得到日期对象
Date d = c.getTime();
Date d2 = new Date(0);
c.setTime(d2); //把这个日历,调成日期 : 1970.1.1 08:00:00
②翻日历
add()方法,在原日期上增加年/月/日。
set()方法,直接设置年/月/日。
Calendar c = Calendar.getInstance();
Date now = c.getTime();
// 当前日期
System.out.println("当前日期:\t" + format(c.getTime()));
// 下个月的今天
c.setTime(now);
c.add(Calendar.MONTH, 1);
System.out.println("下个月的今天:\t" +format(c.getTime()));
// 去年的今天
c.setTime(now);
c.add(Calendar.YEAR, -1);
System.out.println("去年的今天:\t" +format(c.getTime()));
// 上个月的第三天
c.setTime(now);
c.add(Calendar.MONTH, -1);
c.set(Calendar.DATE, 3);
System.out.println("上个月的第三天:\t" +format(c.getTime()));