Java常用API

Java常用API

Date类

构造方法:

public Date();

public Date(long date); 参数是从1970年01月01日零分以来的毫秒数

普通方法:

public long getTime();

public void setTime(long time);

DataFormat类

DateFormat是日期/时间格式化子类的抽象类,他以与语言无关的方式格式化病解析日期或时间

日期/时间格式化子类(如SimpleDateFormat类)允许进行格式化,解析和标准化。

下面代码实例完成了日期的格式化和解析:

public class DateFormatDemo {
    public static void main(String[] args) {

        //日期对象转化为日期字符串
        String rule="yyyy年MM月dd日 HH:mm:ss";

        DateFormat format=new SimpleDateFormat(rule);
        Date date = new Date();

        String StrDate=format.format(date);
        System.out.println(StrDate);

        //日期字符串转化为日期对象
        try {
            Date parseDate = format.parse(StrDate);
            System.out.println(parseDate);
        } catch (ParseException e) {
            e.printStackTrace();
        }

    }
}

Calendar类

public static Calendar getInstance(); 获取日历类的子类对象

public int get(int field); 获取时间字段值,可以获取日历的年月日 值得注意的是,这里获取的月是从0月开始的,按照中国人的习惯应该加一

public final void set(int year,int month,int date); 这里月份按照我们的习惯应该在相应的月份减一

public final Date getTime(); 获取该日历对象转成日期对象

代码实例:

public class CalendarDemo {
    public static void main(String[] args) {
        Calendar rightNow = Calendar.getInstance();
        System.out.println(rightNow);

        //Calendar转为Date对象
        Date time=rightNow.getTime();
        System.out.println(time);

        //获取属性值
        int year=rightNow.get(Calendar.YEAR);
        System.out.println("年份:"+year);;

        int month=rightNow.get(Calendar.MONTH)+1;       //这里月份是从0开始的  所以需要加上 1
        System.out.println("月份:"+month);

        int day=rightNow.get(Calendar.DAY_OF_MONTH);
        System.out.println("日:"+day);

        //设置年月日
        rightNow.set(2021,2-1,27);  //2021年2月27日
        System.out.println(rightNow);
    }
}

Math类

public static int abs(int a); 返回参数a的绝对值

public static double ceil(double a) 返回大于等于a的最小整数 返回该整数的小数形式

public static double floor(double a) 返回小于等于a的最大整数

public static long round(double a) 对参数a四舍五入,返回四舍五入后的值

public static double pow(double a,double b) 求a的b次幂 返回double形式

System类

public static void exit(int status) 操作系统终止该Java程序 0代表正常结束

public static void gc() 暗示Java虚拟机回收不适用的垃圾

public static String getProperty(String key); 获取关于Java的系统属性,如Java版本,Java的vendor,操作系统版本等等。

“os.name” 获取系统的名称

“os.arch” 获取操作系统的架构

“java.home” 获取JRE的目录

“user.dir” 获取当前的工作目录

“user.home” 获取用户的主目录

public class SystemDemo {
    public static void main(String[] args) {
        System.out.println(System.getProperty("os.name"));
        System.out.println(System.getProperty("os.arch"));
        System.out.println(System.getProperty("os.version"));
        System.out.println(System.getProperty("user.home"));
        System.out.println(System.getProperty("user.dir"));
        System.out.println(System.getProperty("java.home"));

        System.exit(0);
        System.out.println("后面的代码");        //这里不会被执行
    }
}

运行结果:

Windows 10
amd64
10.0
C:\Users\LENOVO
E:\Java Pro
D:\Environment\Java\jdk1.8.0_281\jre

正则表达式

如果需要更加详细的了解正则表达式可以阅读这篇文章https://www.cnblogs.com/xyou/p/7427779.html

正则表达式是一个强大的字符串处理工具,可以对字符串进行查找,提取,分割,替换等操作,是一种可以用于模式匹配和替换的规范。正则表达式用以查找文字主体时待匹配的一个或多个字符串。

String类里也提供了如下几个特殊的方法:

boolean matches(String regex) 判断该字符串是否匹配指定的正则表达式

String replaceAll(String regex,String replacement) 将该字符串中所有匹配regex的子串替换成replacement

String replaceFirst(String regex,String replacement) 将该字符串中第一个匹配regex的子串替换成replacement

String[] split(String regexg) 以regex作为分隔符,把该字符串分割成多个子串

上面这些特殊的方法都依赖与Java提供的正则表达式支持,除此之外,Java还提供了Pattern和Matcher两个类专门用于提供正则表达式支持。

正则表达式支持的字符

创建正则表达式就是创建一个特殊的字符串。

正则表达式所支持的合法字符如下表所示。

字符解释
X字符x(x可以是任何合法的字符)
\0mnn八进制0mnn所表示的字符
\xhh十六进制值0x所表示的字符
\uhhhh十六进制值0xhhhh所表示的Unicode字符
\t制表符("\u0009")
\n换行符(“u000A”)
\r回车符("\u000D")
\f换页符("\u000C")
\a报警符("\u0007")
\eEscape符("\u001B")
\cxx对应的控制符。例如,\cM匹配Ctrl-M。x值必须为AZ或az之一

除上面符号外,正则表达式中有一些特殊字符,这些特殊字符在正则表达式中有特殊的用途,比如前面的反斜杠\。如果需要匹配这些特殊字符,就必须首先将这些字符转义,也就是在前面加上反斜杠\。

正则表达式中的特殊字符如下表所示。

特殊字符说明
$匹配一行的结尾。要匹配$自身,要使用$
^匹配一行的开头。要匹配^字符自身,要使用^,下面特殊字符都是如此要匹配自身需要在前面加上反斜杠
()标记子表达式的开始和结束
[]用于确定中括号表达式的开始和结束位置
{}用于表示前面子表达式的出现频度
*指定前面子表达式可以出现零次或多次
+指定前面子表达式可以出现一次或多次
?指定前面子表达式可以出现零次或一次
.匹配出换行符\n以外的任意的单个字符
\用于转义下一个字符,或指定八进制,十六进制
|指定两项之间任选一项

下面是几个正则表达式的例子:

“\u0041\\\\” 匹配 A\

“\u0061\t” 匹配 a<制表符>

“\\?\\[” 匹配 ?[

注意:为什么第一个正则表达式中有那么多反斜杠? 这是因为Java字符串中反斜杠本身需要转义,因此两个反斜杠相当于一个

上面的正则表达式依然只能匹配单个字符,这是因为还未在正则表达式中使用“通配符”,通配符是可以匹配多个字符的特殊符号。正则表达式中的通配符远远超出通配符的功能,他被称为预定义字符,正则表达式支持如下表所示的预定义字符。

预定义字符说明
.可以匹配任何字符
\d匹配0~9的所有数字
\D匹配非数字
\s匹配所有的空白字符,包括空格,制表符,回车符,换页符,换行符等
\S匹配所有的非空白字符
\w匹配所有的单词字符,包括0~9所有数字,26个英文字母和下划线
\W匹配所有的非单词字符

上面的七个预定义字符其实非常容易记忆,其中:

  • d是digit的意思,代表数字
  • s是space的意思,代表空白
  • w是word的意思,代表单词
  • d,s,w的大写形式恰好匹配与之相反的字符

有了上面的预定义字符后,接下来就可以创建强大的正则表达式了。例如:

c\\wt 可以匹配cat,cbt,cct,c0t,c1t等等一批字符

\\d\\d\\d-\\d\\d\\d-\\d\\d\\d\\d 可以匹配如 nnn-nnn-nnnn形式的电话号码 n是0~9的数字

在一些特殊情况下,例如,若只想匹配 a~f 的字母,或者匹配除 ab 之外的所有小写字母,或者匹配中文字符,上面这些预定义字符就无能为力了,此时就需要使用方括号表达式,方括号表达式有如下表所示的几种形式。

方括号表达式说明
表示枚举例如[abc]表示a,b,c其中任意一个字符;[gz]表示其中任意一个字符
表示范围:-例如[a-f]表示a~f范围内的任意字符;[\\u0041-\\u0056]表示十六进制字符\u0041到\u0056范围内的任意字符
表示就否:^例如[abc]表示非a,b,c的任意字符;[a-f]表示不是a~f范围内的任意字符
表示‘与’运算:&&例如[a-z&&[def]]是a~z和[def]的交集,表示d,e,f中任意一个字符
表示‘并’运算并运算与前面的枚举类似。例如[a-d[m-p]]表示[a-dm-p]

正则表达式还支持圆括号,用于将多个表达式组成一个子表达式,圆括号中可以使用或运算符|。例如,正则表达式“((public)|(protected)|(private))”用于匹配 Java 的三个访问控制符其中之一。

除此之外,Java 正则表达式还支持如下表所示的几个边界匹配符。

边界匹配符说明
^行的开头
$行的结尾
\b单词的边界
\B非单词的边界
\A输入的开头
\G前一个匹配的结尾
\Z输入的结尾,仅用于最后的结束符
\z输入的结尾

前面例子中需要建立一个匹配 000-000-0000 形式的电话号码时,使用了 \d\d\d-\d\d\d-\d\d\d\d 正则表达式,这看起来比较烦琐。实际上,正则表达式还提供了数量标识符,正则表达式支持的数量标识符有如下几种模式。

  • Greedy(贪婪模式):数量表示符默认采用贪婪模式,除非另有表示。贪婪模式的表达式会一直匹配下去,直到无法匹配为止。如果你发现表达式匹配的结果与预期的不符,很有可能是因为你以为表达式只会匹配前面几个字符,而实际上它是贪婪模式,所以会一直匹配下去。
  • Reluctant(勉强模式):用问号后缀(?)表示,它只会匹配最少的字符。也称为最小匹配模式。
  • Possessive(占有模式):用加号后缀(+)表示,目前只有 Java 支持占有模式,通常比较少用。

三种模式的数量表示符如下表所示。

贪婪模式勉强模式占用模式说明
X?X??X?+X表达式出现零次或一次
X*X*?X*+X表达式出现零次或多次
X+X+?X++X表达式出现一次或多次
X{n}X{n}?X{n}+X表达式出现n次
X{n,}X{n,}?X{n,}+X表达式最少出现n次
X{n,m}X{n,m}?X{n,m}+X表达式最少出现n次最多出现m次

下面的代码是关于贪婪模式和勉强模式的对比:

public class RegexDemo {
    public static void main(String[] args) {
        String str="hello,world!";

        //贪婪模式下的正则表达式
        System.out.println(str.replaceFirst("\\w*","#"));   //输出  #,world!
        //  "\\w+"  两个斜杠是因为Java中\斜杠也需要转义
        //勉强模式的正则表达式
        System.out.println(str.replaceFirst("\\w*?","#"));   //输出  #hello,world!

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值