首页 > 编程语言 >【Java】从头开始的Java复健day6

【Java】从头开始的Java复健day6

时间:2023-08-14 22:12:30浏览次数:54  
标签:复健 Java String format day6 System println 格式化 out

用的书:《Java从入门到精通》

day1(3.1-3.3): 【Java】从头开始的Java复健day1

day2(3.4-3.8): 【Java】从头开始的Java复健day2

day3(4.1-4.4): 【Java】从头开始的Java复健day3

day4(4.5-5.2): 【Java】从头开始的Java复健day4

day5(5.3-5.4): 【Java】从头开始的Java复健day5

第五章 字符串

5.5 格式化字符串

  • format(String format, Object...args)
    • format 格式字符串
    • args 格式字符串中由格式说明引用的参数,如果还有格式说明以外的参数,则忽略这些额外的参数
  • format(Local I, String format, Object...args)
    • I 格式化过程中要应用的语言环境 如果为null 则不进行本地化
    • format 格式字符串
    • args 格式字符串中由格式说明引用的参数,如果还有格式说明以外的参数,则忽略这些额外的参数

日期和时间字符串格式化

将输出的时间字符串变成自己想要的格式

  • 日期格式化
转换符 说明 实例
%te 一个月中的某一天(1~31) 2
%tb 指定语言环境中的月份简称 Feb(en) 二月(中)
%tB 指定语言环境中的月份全称 February(en) 二月(中)
%tA 指定语言环境中的周几全称 Monday(en) 星期一(中)
%ta 指定语言环境中的周几简称 Mon(en) 星期一(中)
%tc 包括全部日期和时间信息 星期二 三月 25 13:37:22 CST 2005
%tY 4位年份 2008
%tj 一年中的第几天(001~366) 085
%tm 月份 03
%td 一个月中的第几天(1~31) 02
%ty 2位年份 08
  • 时间格式化
转换符 说明 实例
%tH 2位数字的24小时制的小时(00~23) 14
%tI 2位数字的12小时制的小时(01~12) 05
%tk 2位数字的24小时制的小时(0~23) 5
%tl 2位数字的12小时制的小时(1~12) 10
%tM 2位数字的分钟(00~59) 05
%tS 2位数字的秒数(00~60) 12
%tL 3位数字的毫秒数(000~999) 920
%tN 9位数字的微毫秒 062000000
%tp 指定语言环境下上午或下午 下午(中) pm(en)
%tz 相对于GMT RFC 82格式的数字时区偏移量 +0800
%tZ 时区缩写形式的字符串 CST
%ts 1970-01-01 00:00:00至现在经过的秒数 1206426646
%tQ 1970-01-01 00:00:00至现在经过的毫秒数 1206426737453
  • 格式化常见的日期时间组合
转换符 说明 实例
%tF "年-月-日"格式 4位年份 2008-03-25
%tD "月/日/年"格式 2位年份 03/25/08
%tc 全部日期和时间信息 星期二 三月 25 15:20:00 CST 2008
%tr "时:分:秒 PM(AM)"格式 12时制 03:22:06 下午
%tT "时:分:秒"格式 24时制 15:23:50
%tR "时:分"格式 24时制 15:25

常规类型格式化

可以用于任何参数类型

转换符 说明 实例
%b %B 结果被格式化为布尔类型 true
%h %H 结果被格式化为散列码 A05A5198
%s %S 结果被格式化为字符串类型 "abcd"
%c %C 结果被格式化为字符类型 'a'
%d 结果被格式化为十进制整数 40
%o 结果被格式化为八进制整数 11
%x %X 结果被格式化为十六进制整数 4b1
%e 结果被格式化为用科学计数法表示的十进制数 1.700000e+01
%a 结果被格式化为带有效位数和指数的十六进制浮点数 0X1.C000000000001P4
%n 结果为特定于平台的行分隔符
%% 结果为字面值'%' %
import java.util.Date;

public class Java5_5 {
    public static void main(String[] args){
        // 日期格式化
        Date date = new Date();
        String year = String.format("%tY", date);
        String month = String.format("%tB", date);
        String day = String.format("%td", date);
        System.out.println(year + "年" + month + day + "日");

        // 时间格式化
        String hour = String.format("%tH", date);
        String minute = String.format("%tM", date);
        String second = String.format("%tS", date);
        System.out.println(hour + "时" + minute + "分" + second + "秒");

        // 格式化常见的日期时间组合
        String time = String.format("%tc", date);
        String from = String.format("%tF", date);
        System.out.println("全部的时间信息:" + time);
        System.out.println("年-月-日格式:" + from);

        // 常规类型格式化
        String str = String.format("%d", 400 / 2);
        String str2 = String.format("%b", 3 > 5);
        String str3 = String.format("%x", 200);
        System.out.println("400的一半是" + str);
        System.out.println("3>5正确吗?" + str2);
        System.out.println("200的16进制数是" + str3);
    }
}

5.6 使用正则表达式

正则表达式用于判断语句中某一字符是否满足某一格式

正则表达式关键的就是要会写正则表达式

元字符 正则表达式中的写法 意义
. . 代表任意一个字符
\d \\d 代表0~9的任何一个数字
\D \\D 代表任何一个非数字字符
\s \\s 代表空白字符 如'\t' '\n'
\S \\S 代表非空白字符
\w \\w 代表可用作标识符的字符 但不包括"$"
\W \\W 代表不可用于标识符的字符
\p \\p 代表小写字母a~z
\p \\p 代表大写字母A~Z
\p \\p ASCII字符
\p \\p 字母字符
\p \\p 十进制数字 0~9
\p \\p 数字或字母字符
\p \\p 标点符号 !"#$%'()*+,-./:;<=>?@[\\]^_`{|}~
\p \\p 可见字符 [\p{Alnum}\p{Punct}]
\p \\p 可打印字符 [\p{Graph}\x20]
\p \\p 空格或制表符 [\t]
\p \\p 控制字符 [\x00-\x1F\x7F]
  • 如果想在正则表达式中单纯表达'.' 需要加转义字符''

  • ^ 匹配开头 $ 匹配结尾

  • 可以使用方括号括起来若干字符来表示一个元字符 该元字符可以代表方括号中任何一个字符

    eg [abc]4 即表示 a4 or b4 or c4 这三个都可以被匹配到

    • [^456] 456以外的任何字符
    • [a-r] a-r中任一字符
    • [a-zA-Z] 任一英文字母
    • [a-e[g-z]] a-e或g-z中的任一字符 并运算
    • [a-o&&[def]] d e f 交运算
    • [a-d&&[^bc]] a d 差运算
限定修饰符 意义 实例
0或1次 A?
* 0或多次 A*
+ 一次或多次 A+
{n} 正好出现n次 A\{2}
{n,} 至少出现n次 A{3,}
{n,m} 出现n~m次 A{2,6}
^ 该正则表达式匹配的字符串在开头 ^A
美元符号 该正则表达式匹配的字符串在开结尾 A美元符号

*"$"在表格中总是格式出问题 故用美元符号代替

public class Java5_6 {
    public static void main(String[] args){
        // \\w+: 一次或多次标识符 @ \\w+: 一次或多次标识符
        // (\.\w{2,3})*: .和两三个标识符 这一点主要是识别类似.com .cn .org等 这个组合出现0或多次
        // \.\w{2,3} 最后的.com .cn .org等
        // 这个正则表达式不一定可以匹配所有的邮件地址
        String regex = "\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
        String str1 = "aaa@";
        String str2 = "aaaaa";
        String str3 = "[email protected]";
        if (str1.matches(regex)){
            System.out.println(str1 + "是一个合法的E-mail地址");
        }
        else if (str2.matches(regex)){
            System.out.println(str2 + "是一个合法的E-mail地址");
        }
        else if (str3.matches(regex)){
            System.out.println(str3 + "是一个合法的E-mail地址");
        }
    }
}

5.7 字符串生成器

创建成功的字符串对象 长度是固定的 内容不能被改变和编译

虽然+可以用来附加新字符或者字符串 但是会产生一个新的String实例 会在内存中创建新的字符串对象

J2SE5.0新增了可变的字符序列String-Builder类

新创建的StringBuilder类初始容量是16个字符 如果超过则会自动增长长度

若要使用StringBuilder来输出字符串结果 可以使用toString方法

  • append() 追加 可以接受任何类型的数据 比如int等
  • insert(int offset, arg) 指定位置插入 可以接受任何类型的数据
  • delete(int start, int end) 删除指定位置的字符串
public class Java5_7 {
    public static void main(String[] args) {
        String str = "";
        long starTime = System.currentTimeMillis();
        for (int i=0; i < 10000; i++){
            str = str + i;
        }
        long endTime = System.currentTimeMillis();
        long time = endTime - starTime;
        System.out.println("String消耗时间:" + time);
        StringBuilder builder = new StringBuilder("");
        starTime = System.currentTimeMillis();
        for (int j=0; j < 10000; j++){
            builder.append(j);
        }
        endTime = System.currentTimeMillis();
        time = endTime - starTime;
        // 耗时明显更短
        System.out.println("StringBuilder消耗时间:" + time);
    }
}

5.8 小结 略

5.9 练习

public class Java_Test5_9 {
    public static void main(String[] args) {
        System.out.println("1.使用String类的toUpperCase()和toLowerCase()来实现大小写的转换");
        String s1 = "sidHsoH";
        System.out.println("s1 to upper case: " + s1.toUpperCase());
        System.out.println("s1 to lower case: " + s1.toLowerCase());
        System.out.println("2.分别截取字符串str1和str2的部分内容 如果截取后的两个字串相同,输出‘两个子串相同’,否则输出‘两个子串并不相同’");
        String str1 = "hello world";
        String str2 = "hello world!";
        String substr1 = str1.substring(1);
        String substr2 = str2.substring(1);
        if (substr1.equals(substr2)){
            System.out.println("两个子串相同");
        }
        else {
            System.out.println("两个子串并不相同");
        }
        System.out.println("3.用正则表达式判断字符串text是否为合法的手机号");
        String regex = "^1[3456789]\\d{9}$";
        String tel = "112602260";
        if (tel.matches(regex)){
            System.out.println(tel + "是一个合法的手机号");
        }
        else {
            System.out.println(tel + "不是一个合法的手机号");
        }
        System.out.println("4.使用字符串生成器 将字符串str追加1~10这10个数字");
        StringBuilder str = new StringBuilder("start");
        for (int i=1; i<11; i++){
            str.append(i);
        }
        System.out.println(str);
    }
}

标签:复健,Java,String,format,day6,System,println,格式化,out
From: https://www.cnblogs.com/ryukirin/p/17629913.html

相关文章

  • Java面向对象----个人参考资料
    Java面向对象:什么是面向对象、类与对象、封装、构造方法、static关键字、继承、抽象类、接口、多态一、什么是面向对象1、面向过程思想面向过程:(PO,ProcedureOriented)在理解面向对象思想之前,我首先来回顾一下以前C语言中的面向过程思想,面向过程思想强调的是过程(动作),在面向过程的开......
  • EXP 一款 Java 插件化热插拔框架
    EXP一款Java插件化热插拔框架前言多年以来,ToB的应用程序都面临定制化需求应该怎么搞的问题。举例,大部分本地化软件厂家,都有一个标准程序,这个程序支持大部分企业的功能需求,但面对世界500强等大客户时,他们的特殊需求,厂家通常是无法拒绝的(通常因为订单大,给的多,可背书)。比如......
  • Java 日志系列:JUL 使用和原理分析
    目录一、简介二、使用三、日志级别四、Logger继承关系五、配置文件六、原理解析一、简介JUL全称JavautilLogging是java原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框架使用方便,学习简单,能够在小型应用中灵活使用。Loggers:被称为记录器,应用程序通过获......
  • java高级之多线程
    1.什么是多线程首先引入程序与进程概念:程序(program)程序是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码(还没有运行起来),静态对象。进程(process)进程是程序的一次执行过程,也就是说程序运行起来了,加载到了内存中,并占用了cpu的资源。这是一个动态的过......
  • java中语法糖
    概念   语法糖(SyntacticSugar),也称糖衣语法。指的是在计算机语言中添加的某种语法,这种语法对语言的编译结果和功能并没有实际影响,但是却能更方便程序员使用该语言。用处   通常来说使用语法糖能够减少代码量、增加程序的可读性,从而减少程序代码出错的机会。举例  ......
  • Java中常用的设计模式
    Java中常用的设计模式有以下几种:单例模式(SingletonPattern):确保一个类只有一个实例,并提供全局访问点。工厂模式(FactoryPattern):通过工厂类创建对象,隐藏对象的实例化过程。抽象工厂模式(AbstractFactoryPattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体类。建造者......
  • java_零钱通_面向过程版本
    packagechange;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Scanner;publicclassChange{publicstaticvoidmain(String[]args){booleanloop=true;Scannerscanner=newScanner(System.in);......
  • java_零钱通_面向对象版本
    功能packagechange2;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.Scanner;publicclassChangeOOPFunction{//状态booleanloop=true;Scannerscanner=newScanner(System.in);Stringkey="";......
  • Java入门学习——二进制、八进制、十六进制
    一、十进制转二进制的算法十进制数转二进制数:除二取余法。  二、十进制转十进制的算法三、二进制转十进制的算法    四、八进制、十六进制介绍为了便于观察和表示二进制,推出八进制和十六进制。每3位二进制作为一个单元,最小数是0(000),最大数是7(111),共8个数字,这就是......
  • Java基础之--内部类
    1、局部内部类比如: 2、匿名内部类 packagecom.lwx.inner;publicclassAnonymousInnerClass{publicstaticvoidmain(String[]args){Outer02outer02=newOuter02();outer02.m1();}}classOuter02{privateintn1=20;......