how2j:JAVA学习笔记——DAY 9

本文详细介绍了Java中字符串的格式化输出、常用方法,包括 `%s`、`%d`、`%n` 格式化符号,以及字符、字符串的操纵,如 `Character` 类的方法。同时,讲解了日期处理,包括 `Date` 类、`SimpleDateFormat` 以及 `Calendar` 的使用,如日期格式化、日期转换和日历操作。此外,还涉及到了字符串的不可变性和`StringBuffer`的可变性特点。
摘要由CSDN通过智能技术生成

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");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bvdt1jQJ-1638414804508)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211120163339986.png)]

		//转义字符要再加一个\才能正常显示
		System.out.println("使用\\t制表符能达到右对齐效果");
		System.out.println("abc\tdef");
		System.out.println("ab\tdef");
		System.out.println("a\tdef");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ClCScCB1-1638414804518)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211120163432426.png)]

		System.out.println("一个\\t制表符的长度展示");
		System.out.println("12345678对齐");
		System.out.println("\t对齐");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h8eW2Yam-1638414804519)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211120163517302.png)]

		System.out.println("换行符\\n的作用效果");
		System.out.println("哈哈\n嘿嘿");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNLfE9Ww-1638414804521)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211120163603593.png)]

		System.out.println("单引号 \\'");
        System.out.println("\'abc\'def");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IufCwjX6-1638414804522)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211120163657445.png)]

		//显示双引号转义字符前要加两个\\,否则将会报错(编译器认为少了一个双引号)
        System.out.println("双引号\\\"");
        System.out.println("\"哈哈\"嘿嘿");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZBzOUrAT-1638414804523)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211120163735504.png)]

		System.out.println("反斜杠本身\\");
        System.out.println("哈哈哈哈\\");

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E9XEM4tO-1638414804524)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211120163811337.png)]

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);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d2UFruvE-1638414804525)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211124102417764.png)]

为什么StringBuffer可以改变长度?

和String内部是一个字符数组一样,StringBuffer也维护了一个字符数组。但是这个数组留有冗余长度。

		//StringBuffer长度和容量
		String str2="Hi";
		StringBuffer sb2=new StringBuffer(str2);
		System.out.println(sb2.length());
		System.out.println(sb2.capacity());

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5nTa2hOv-1638414804526)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211124104345077.png)]

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);
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-skLfghTI-1638414804527)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211129143834282.png)]

		SimpleDateFormat sdf2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
		Date d2=new Date();
		String str2=sdf2.format(d2);
		System.out.println(str2);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-st3zdJYZ-1638414804527)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211129144039126.png)]

②字符串转日期

​ 格式(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();
		}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ph8J8QjX-1638414804528)(C:\Users\26890\AppData\Roaming\Typora\typora-user-images\image-20211129145217464.png)]

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()));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值