Java常用API(二)
一.字符串运算–split方法
public String [] split(String regex)
该方法的工作原理是通过使用给定表达式和限制参数为零调用双参数split方法.
因此,尾随的空字符串不会包含在结果数组中.
例如:String s=“1#2#3#4#5#”
res=[“1”,“2”,“3”,“4”,“5”]
返回的子串的次数应该是数组的长度-1
package com.Itstar.demo01;
public class StringDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String parent="itstarasdfghjklitstaryuiopitstaraaa***bbb**123itstar";
String child="itstar";
int count=getChildStringCount(parent,child);
System.out.println("方法1---itstar 在父串中出现的次数为"+count);
count=matchStringBySplit(parent,child);
System.out.println("方法2---itstar 在父串中出现的次数为"+count);
/*String s="#1#2#3#4#5";
String[] res=s.split("#");
System.out.println("字符串的长度为:"+res.length);
for(int i=0;i<res.length;i++) {
System.out.println(res[i]);
}*/
}
/*
* 方法1 通过 indexof+ substring+循环 实现了次数统计
*
* */
public static int getChildStringCount(String parent,String child) {
//用来记录子字符串出现的次数
int count=0;
/*indexof 循环遍历子字符串出现的字数 就需要 截取 substring
* 把已找到的部分截取 遍历后面的*/
//第一次 子字符串出现的索引
int index=0;
/*
* 优化前:
* while(true) {
index=parent.indexOf(child);
如果k的值不存在,则返回-1 。
if(index!=-1) {
//代表我们找到了 子字符串 进行加1
count++;
}else {
//当返回-1时 循环中止
break;
}
//更新我们的 父字符串 从 index+子串长度的位置开始截取
parent=parent.substring(index+child.length());
}*/
//优化后:
while((index=parent.indexOf(child))!=-1) {
System.out.println(index);
count++;
parent=parent.substring(index+child.length());
}
return count;
}
/*
* 方法2 通过split方法实现 次数统计
* regex: child String 子字符串
* 让父字符串根据子串去分割 根据得到的String数组大小 类得到 字符数量
* 如果是 子串在最后一个 则 返回的字符串数组长度 应为 原来长度
* 否则 返回 字符串数组长度-1
* */
public static int matchStringBySplit(String parent,String child) {
int count=0;
// 首先获得根据 child split之后的字符串数组
String[] results=parent.split(child);
//判断一下 最后一个字符串 是否是 我们要匹配的字符串。
String last=parent.substring(parent.length()-child.length());
if(last.equals(child)) {
// 返回的字符串数组长度 应为 原来长度
count=results.length;
}else {
//返回 字符串数组长度-1
count=results.length-1;
}
return count;
}
}
结果:
0
9
5
14
方法1---itstar 在父串中出现的次数为4
方法2---itstar 在父串中出现的次数为4
package com.Itstar.demo01;
/**
* String split
*
*
* */
public class StringDemo02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String str="1000,2000,2000,3000,888";
//给的是 字符串 计算一下 这几个月的劳务费总和,
int salary=salary(str,",");
System.out.println("您这几个月的薪水为:"+salary);
}
/*
*
* 通过 字符串 split方法 获得 根据 , 进行分割
* 字符串数组
* 字符 转换为 数字
* ValueOf
* 最后求和
* */
public static int salary(String str,String regex) {
int salary=0;
//step1 split 字符串
String[] results=str.split(regex);
//step 2 进行遍历
for(int i=0;i<results.length;i++) {
//step 3 类型转化
int temp=Integer.valueOf(results[i]);
//step 4 求和
salary+=temp;
}
return salary;
}
}
结果:
您这几个月的薪水为:8888
二.字符串运算-规则匹配
正则表达式 身份证号 电话号码 邮箱 QQ号等等
字符类:
[abc] a或b或c 都可以
[a-zA-Z] a-z或者A到Z 两头的字母包含在内,所有字母都可以
[0-9] 0-9的数字都可以
\d 0-9的数字都可以
\D [^0-9] 不是数字
\w 表示字母数字 下划线在内的任何字符 [a-zA-Z0-9_]
X? X出现一次或一次也没有
X* X零次或多次
X+ X至少出现一次
X{n} 恰好只有n次
X{n,m} n=<X<=m次
规则表达式:
^ 表示正则表达式的开头
$ 表示正则表达式的结尾
例如:验证一个QQ号码
要求:(1)QQ号码 5-15位
(2)0不能开头
规则表达式(字符串):
regex="[1-9]\d{4,14}"
public boolean matches(String regex)告诉这个字符串是否匹配给定的regular expression 。
这种形式为str .matches( regex )方法的)产生与表达式完全相同的结果
Pattern. matches(regex, str)
参数
regex - 要匹配此字符串的正则表达式
结果
true如果,并且只有这个字符串与给定的正则表达式匹配
异常
PatternSyntaxException - 如果正则表达式的语法无效
//两个反斜杠 是转义的意思 (\\.\\w{2,3})+ 表示 点出现一次或多次
// +号所跟的内容 如果在括号里面 表示 \\w{2,3} 可以出现 多次
package com.Itstar.demo02;
import java.util.Scanner;
/**
* 验证QQ号码 是否合法
*
* */
public class RegexDemo01 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入QQ号码:");
String qq=sc.nextLine();
//两个反斜杠 是转义的意思
String regex="[1-9]\\d{4,14}";
checkQQ(qq,regex);
}
public static void checkQQ(String qq,String regex) {
boolean flag=qq.matches(regex);
if(flag) {
System.out.println("QQ合法");
}else {
System.out.println("QQ不合法");
}
}
}
结果:
请输入QQ号码:
package com.Itstar.demo02;
import java.util.Scanner;
import javax.swing.plaf.synth.SynthSeparatorUI;
/**
* 验证邮箱是否合法
* 123@qq.com yahoo.com.cn net
* (1)@的前半部分 邮箱的名字 字母 数字 下滑线 都可以 [a-zA-Z0-9_-]
* (2)@
* (3)@后半部分 \w+\.\w{2,3}
* */
public class RegexDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入邮箱号码:");
//String mail=sc.nextLine();
//两个反斜杠 是转义的意思 (\\.\\w{2,3})+ 表示 点出现一次或多次
// +号所跟的内容 如果在括号里面 表示 \\w{2,3} 可以出现 多次
String regex="[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.\\w{2,3})+";
while(true) {
String mail=sc.nextLine();
if(mail.equals("exit")) break;
CheckMail(mail,regex);
}
}
/*
* 邮箱号:mail
* 规则表达式:regex
* String 自带的 matches方法
* */
public static void CheckMail(String mail,String regex) {
if(mail.matches(regex)) {
System.out.println("邮箱号是合法的");
}else {
System.out.println("邮箱号不合法");
}
}
}
结果:
请输入邮箱号码:
package com.Itstar.demo02;
import java.util.Scanner;
import javax.swing.plaf.synth.SynthSeparatorUI;
/**
* 验证手机号码 是否合法
* (1)手机号码 以1开头
* (2)手机号码 11位
* (3)手机号码第2位 3 4 5 6 7 8 9
* */
public class RegexDemo3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入手机号码:");
String phoneNum=sc.nextLine();
//两个反斜杠 是转义的意思
String regex="[1][3-9]\\d{9}";
CheckPhone(phoneNum,regex);
}
/*
* 手机号:phoneNum
* 规则表达式:regex
* String 自带的 matches方法
* */
public static void CheckPhone(String phoneNum,String regex) {
if(phoneNum.matches(regex)) {
System.out.println("手机号是合法的");
}else {
System.out.println("手机号不合法");
}
}
}
结果:
请输入手机号码:
三.Date
1.概述
包含集合框架,旧集合类,事件模型,日期和时间设施,
国际化和其他实用程序类(字符串tokenizer,随机数生成器和位数组)。
java.util.* 工具包
在JDK 1.1之前, Date有两个附加功能。 它允许将日期解释为年,月,日,小时,分钟和第二个值。 它还允许格式化和解析日期字符串。 不幸的是,这些功能的API不适合国际化。 从JDK 1.1开始, Calendar类应该用于在日期和时间字段之间进行转换,
并且DateFormat类应用于格式化和解析日期字符串。 在相应的方法Date被弃用
允许JDBC将其标识为 SQlDate值
格林尼治标准时间(GMT)定义的,相当于世界时间(UT)。
2.构造方法
Date()
分配一个 Date对象,并初始化它,以便它代表它被分配的时间,测量到最近的毫秒。
Date(long date)
分配一个 Date对象,并将其初始化为表示自称为“时代”的标准基准时间以后的指定毫秒数,
即1970年1月1日00:00:00 GMT。
3.常用方法
boolean after(Date when)
测试此日期是否在指定日期之后。
boolean before(Date when)
测试此日期是否在指定日期之前。
Object clone()
返回此对象的副本。
int compareTo(Date anotherDate)
比较两个日期进行订购。
boolean equals(Object obj)
比较两个日期来平等。
static Date from(Instant instant)
从 Instant对象获取一个 Date的实例。
getTime() 返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒 数 。
package com.Itstar.demo03;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
//以毫秒为单位计算的 距离就是 1970年 0点0分0 秒
//日期1 时间原点
Date date=new Date(0);
System.out.println(date);
//日期2 当前时间
Date now=new Date();
System.out.println(now.after(date));
System.out.println(now.before(date));
//getTime() 返回自1970年1月1日以来,由此 Date对象表示的00:00:00 GMT的毫秒 数 。
System.out.println(now.getTime());
}
}
结果:
Thu Jan 01 08:00:00 CST 1970
true
false
1543934284187