java 如何从字符串里面提取时间

网友投稿 206 2022-09-27


java 如何从字符串里面提取时间

目录如何从字符串里面提取时间我们可以使用正则表达式从字符串中提取年份,要求输出1000-4999之间的所有年份正则表达式传统匹配:

如何从字符串里面提取时间

今天接到一个需求,需要从一段带有时间串的字符串里面提取出时间保存。

"PDFS(iZh9k5gurgwcwpZ) 2020-01-01 21:27:36.560 >订单编号:1112233 提交订单成功! 跟踪号:待取跟踪号 内部单号:2342244"

需要从上面数据中心提取出 2020-01-01 21:27:36要怎么操作呢?

我们可以使用正则表达式

对时间串进行提取,并处理,代码如下:

package com.epean.trade.framework.util;

import org.apache.commons.lang.time.DateFormatUtils;

import org.apache.commons.lang.time.DateUtils;

import java.text.ParseException;

import java.util.Date;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* Created by chpeng on 2020/08/18 0008.

*/

public class StringDateUtils {

/**

*

* @Description: 从字符串中截取出正确的时间

* @param stringTime

* @return:

* @throws

*/

public static Date cutDate(String stringTime) {

String regs[] = { "\\d{4}年\\d{2}月\\d{2}日\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{4}年\\d{2}月\\d{2}日\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{4}年\\d{2}月\\d{2}日\\d{2}时\\d{2}分\\d{2}秒",

"\\d{4}年\\d{2}月\\d{2}日\\s\\d{2}时\\d{2}分",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{2}时\\d{2}分",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{1}时\\d{2}分",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{2}时\\d{2}分",

"\\d{4}年\\d{2}月\\d{2}日\\d{2}时\\d{2}分",

"\\d{4}年\\d{2}月\\d{2}日\\s\\d{2}时",

"\\d{4}年\\d{2}月\\d{2}日\\s\\d{1}时",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{2}时",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{1}时",

"\\d{4}年\\d{2}月\\d{2}日\\d{2}时", "\\d{4}年\\d{2}月\\d{2}日",

"\\d{4}年\\d{2}月\\d{1}日", "\\d{4}年\\d{1}月\\d{2}日",

"\\d{4}年\\d{1}月\\d{1}日",

"\\d{4}年\\d{2}月\\d{2}日\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{4}年\\d{2}月\\d{2}日\\s\\d{2}:\\d{1}:\\d{2}",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{2}:\\d{1}:\\d{2}",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{4}年\\d{2}月\\d{2}日\\d{2}:\\d{2}:\\d{2}",

"\\d{4}年\\d{2}月\\d{2}日\\s\\d{2}:\\d{2}",

"\\d{4}年\\d{2}月\\d{2}日\\s\\d{1}:\\d{2}",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{2}:\\d{2}",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{1}:\\d{2}",

"\\d{4}年\\d{2}月\\d{2}日\\d{2}:\\d{2}",

"\\d{4}年\\d{2}月\\d{2}日\\s\\d{2}",

"\\d{4}年\\d{2}月\\d{2}日\\s\\d{1}",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{2}",

"\\d{4}年\\d{1}月\\d{2}日\\s\\d{1}",

"\\d{4}年\\d{2}月\\d{2}日\\d{2}",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{4}-\\d{1}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{4}-\\d{1}-\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{1}:\\d{2}",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{2}", "\\d{4}-\\d{2}-\\d{2}",

"\\d{4}-\\d{2}-\\d{1}", "\\d{4}-\\d{1}-\\d{2}",

"\\d{4}-\\d{1}-\\d{1}",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{4}-\\d{1}-\\d{2}\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{4}-\\d{1}-\\d{2}\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{4}-\\d{1}-\\d{1}\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{2}时\\d{2}分",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{1}时\\d{2}分",

"\\d{4}-\\d{1}-\\d{2}\\s\\d{2}时\\d{2}分",

"\\d{4}-\\d{1}-\\d{2}\\s\\d{1}时\\d{2}分",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{2}时",

"\\d{4}-\\d{2}-\\d{2}\\s\\d{1}时",

"\\d{4}-\\d{1}-\\d{2}\\s\\d{2}时",

"\\d{4}-\\d{1}-\\d{2}\\s\\d{1}时", "\\d{4}.\\d{2}.\\d{2}",

"\\d{4}.\\d{2}.\\d{1}", "\\d{4}.\\d{1}.\\d{2}",

"\\d{4}.\\d{1}.\\d{1}",

"\\d{4}.\\d{2}.\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{4}.\\d{2}.\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{4}.\\d{1}.\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{4}.\\d{1}.\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{4}.\\d{1}.\\d{1}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{4}.\\d{2}.\\d{2}\\s\\d{2}:\\d{2}",

"\\d{4}.\\d{2}.\\d{2}\\s\\d{1}:\\d{2}",

"\\d{4}.\\d{1}.\\d{2}\\s\\d{2}:\\d{2}",

"\\d{4}.\\d{1}.\\d{2}\\s\\d{1}:\\d{2}",

"\\d{4}.\\d{2}.\\d{2}\\s\\d{2}",

"\\d{4}.\\d{2}.\\d{2}\\s\\d{1}",

"\\d{4}.\\d{1}.\\d{2}\\s\\d{2}",

"\\d{4}.\\d{1}.\\d{2}\\s\\d{1}",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{2}时\\d{2}分",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{1}时\\d{2}分",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{2}时\\d{2}分",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{1}时\\d{2}分",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{2}时",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{1}时",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{2}时",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{1}时",

"\\d{4}/\\d{2}/\\d{2}",

"\\d{4}/\\d{2}/\\d{1}",

"\\d{4}/\\d{1}/\\d{2}",

"\\d{4}/\\d{1}/\\d{1}",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

arZCln "\\d{4}/\\d{1}/\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{2}:\\d{2}",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{1}:\\d{2}",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{2}:\\d{2}",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{1}:\\d{2}",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{2}",

"\\d{4}/\\d{2}/\\d{2}\\s\\d{1}",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{2}",

"\\d{4}/\\d{1}/\\d{2}\\s\\d{1}",

"\\d{2}月\\d{2}日\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{2}月\\d{2}日\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{1}月\\d{2}日\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{1}月\\d{2}日\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{2}月\\d{2}日\\d{2}时\\d{2}分\\d{2}秒",

"\\d{2}月\\d{2}日\\s\\d{2}时\\d{2}分",

"\\d{1}月\\d{2}日\\s\\d{2}时\\d{2}分",

"\\d{1}月\\d{2}日\\s\\d{1}时\\d{2}分",

"\\d{1}月\\d{2}日\\s\\d{2}时\\d{2}分",

"\\d{2}月\\d{2}日\\d{2}时\\d{2}分",

"\\d{2}月\\d{2}日\\s\\d{2}时",

"\\d{2}月\\d{2}日\\s\\d{1}时",

"\\d{1}月\\d{2}日\\s\\d{2}时",

"\\d{1}月\\d{2}日\\s\\d{1}时",

"\\d{2}月\\d{2}日\\d{2}时", "\\d{4}年\\d{2}月\\d{2}日",

"\\d{2}月\\d{1}日", "\\d{4}年\\d{1}月\\d{2}日",

"\\d{1}月\\d{1}日",

"\\d{2}月\\d{2}日\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{2}月\\d{2}日\\s\\d{2}:\\d{1}:\\d{2}",

"\\d{1}月\\d{2}日\\s\\d{2}:\\d{1}:\\d{2}",

"\\d{1}月\\d{2}日\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{2}月\\d{2}日\\d{2}:\\d{2}:\\d{2}",

"\\d{2}月\\d{2}日\\s\\d{2}:\\d{2}",

"\\d{2}月\\d{2}日\\s\\d{1}:\\d{2}",

"\\d{1}月\\d{2}日\\s\\d{2}:\\d{2}",

"\\d{1}月\\d{2}日\\s\\d{1}:\\d{2}",

"\\d{2}月\\d{2}日\\d{2}:\\d{2}",

"\\d{2}月\\d{2}日\\s\\d{2}",

"\\d{2}月\\d{2}日\\s\\d{1}",

"\\d{1}月\\d{2}日\\s\\d{2}",

"\\d{1}月\\d{2}日\\s\\d{1}",

"\\d{2}月\\d{2}日\\d{2}",

"\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{2}-\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{1}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{1}-\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{2}-\\d{2}\\s\\d{2}:\\d{2}",

"\\d{2}-\\d{2}\\s\\d{1}:\\d{2}",

"\\d{2}-\\d{2}\\s\\d{2}", "\\d{4}-\\d{2}-\\d{2}",

"\\d{2}-\\d{1}", "\\d{4}-\\d{1}-\\d{2}",

"\\d{1}-\\d{1}",

"\\d{2}-\\d{2}\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{2}-\\d{2}\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{1}-\\d{2}\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{1}-\\d{2}\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{1}-\\d{1}\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{2}-\\d{2}\\s\\d{2}时\\d{2}分",

"\\d{2}-\\d{2}\\s\\d{1}时\\d{2}分",

"\\d{1}-\\d{2}\\s\\d{2}时\\d{2}分",

"\\d{1}-\\d{2}\\s\\d{1}时\\d{2}分",

"\\d{2}-\\d{2}\\s\\d{2}时",

"\\d{2}-\\d{2}\\s\\d{1}时",

"\\d{1}-\\d{2}\\s\\d{2}时",

"\\d{1}-\\d{2}\\s\\d{1}时", "\\d{4}.\\d{2}.\\d{2}",

"\\d{2}.\\d{1}", "\\d{4}.\\d{1}.\\d{2}",

"\\d{1}.\\d{1}",

"\\d{2}.\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{2}.\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{1}.\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{1}.\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{1}.\\d{1}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{2}.\\d{2}\\s\\d{2}:\\d{2}",

"\\d{2}.\\d{2}\\s\\d{1}:\\d{2}",

"\\d{1}.\\d{2}\\s\\d{2}:\\d{2}",

"\\d{1}.\\d{2}\\s\\d{1}:\\d{2}",

"\\d{2}.\\d{2}\\s\\d{2}",

"\\d{2}.\\d{2}\\s\\d{1}",

"\\d{1}.\\d{2}\\s\\d{2}",

"\\d{1}.\\d{2}\\s\\d{1}",

"\\d{2}/\\d{2}\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{2}/\\d{2}\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{1}/\\d{2}\\s\\d{2}时\\d{2}分\\d{2}秒",

"\\d{1}/\\d{2}\\s\\d{1}时\\d{2}分\\d{2}秒",

"\\d{2}/\\d{2}\\s\\d{2}时\\d{2}分",

"\\d{2}/\\d{2}\\s\\d{1}时\\d{2}分",

"\\d{1}/\\d{2}\\s\\d{2}时\\d{2}分",

"\\d{1}/\\d{2}\\s\\d{1}时\\d{2}分",

"\\d{2}/\\d{2}\\s\\d{2}时",

"\\d{2}/\\d{2}\\s\\d{1}时",

"\\d{1}/\\d{2}\\s\\d{2}时",

"\\d{1}/\\d{2}\\s\\d{1}时",

"\\d{2}/\\d{2}",

"\\d{2}/\\d{1}",

"\\d{1}/\\d{2}",

"\\d{1}/\\d{1}",

"\\d{2}/\\d{2}\\s\\d{2}:\\d{2}:\d{2}",

"\\d{2}/\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{1}/\\d{2}\\s\\d{2}:\\d{2}:\\d{2}",

"\\d{1}/\\d{2}\\s\\d{1}:\\d{2}:\\d{2}",

"\\d{2}/\\d{2}\\s\\d{2}:\\d{2}",

"\\d{2}/\\d{2}\\s\\d{1}:\\d{2}",

"\\d{1}/\\d{2}\\s\\d{2}:\\d{2}",

"\\d{1}/\\d{2}\\s\\d{1}:\\d{2}",

"\\d{2}/\\d{2}\\s\\d{2}",

"\\d{2}/\\d{2}\\s\\d{1}",

"\\d{1}/\\d{2}\\s\\d{2}",

"\\d{1}/\\d{2}\\s\\d{1}",

};

String str = "";

Date date = null;

for (String reg : regs) {

String temp = match(reg, stringTime);

if (temp.length() > str.length()) {

str = temp;

if (!"".equals(str)) {

date = formatDate(str);

}

}

}

return date;

}

/**

*

* @Description: 把String格式的时间转化为date

* @param stringTime

* @return:

* @throws

*/

public static Date formatDate(String stringTime) {

Date date = null;

if (StringUtils.isNotBlank(stringTime)) {

String[] pattern = new String[] { "yyyy年MM月dd日HH时mm分ss秒",

"yyyy年MM月dd日 HH时mm分ss秒", "yyyy年MM月dd日HH时mm分",

"yyyy年MM月dd日 HH时mm分", "yyyy年MM月dd日 HH时", "yyyy年MM月dd日HH时",

"yyyy年MM月dd日", "yyyy年MM月dd日HH:mm:ss",

"yyyy年MM月dd日 HH:mm:ss", "yyyy年MM月dd日HH:mm",

"yyyy年MM月dd日 HH:mm", "yyyy年MM月dd日 HH", "yyyy年MM月dd日HH",

"yyyy-MM-dd HH时mm分ss秒", "yyyy-MM-dd HH时mm分",

"yyyy-MM-dd HH时", "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss",

"yyyy-MM-dd HH:mm", "yyyy-MM-dd HH",

"yyyy/MM/dd HH时mm分ss秒", "yyyy/MM/dd HH时mm分",

"yyyy/MM/dd HH时", "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss",

"yyyy/MM/dd HH:mm", "yyyy/MM/dd HH", "yyyy.MM.dd HH:mm:ss",

"yyyy.MM.dd HH:mm", "yyyy.MM.dd HH", "yyyy.MM.dd",

"yyyyMMdd", };

try {

date = DateUtils.parseDate(stringTime, pattern);

} catch (ParseException e) {

e.printStackTrace();

}

}

return date;

}

public static String match(String reg, String stringTime) {

Pattern p = Pattern.compile(reg);

Matcher m = p.matcher(stringTime);

String s = "";

if (m.find()) {

s += m.group();

}

return s;

}

/**

* 格式化

* @Title: DateToString

* @Description:

* @param time

* @return:

* @throws

*/

public static String DateToString(Date time) {

String newDate = DateFormatUtils.format(time,"yyyy-MM-dd HH:mm:ss");

return newDate;

}

public static void main(String[] args) {

String stringTime = "PDFS(iZh9k5gurgwcwpZ) 2020-01-01 21:27:36.560 >订单编号:1112233 提交订单成功! 跟踪号:待取跟踪号 内部单号:2342244";

Date date = cutDate(stringTime);

System.out.println(date);

System.out.println(DateToString(date));

}

}

我们测试一下:

没问题的。

从字符串中提取年份,要求输出1000-4999之间的所有年份

正则表达式

常用正则表达式:

\d : 数字字符匹配。等效于 [0-9]

\D : 非数字字符匹配。等效于 [^0-9]。

{n} : n为非负整数,正好匹配n次

{n,} : n为非负整数,至少匹配n次

[a-z]: 字符范围。匹配指定范围内的任何字符,例如,"[a-z]"匹配"a"到"z"范围内的任何小写字母。

[^a-z]: 反向范围字符。匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。

\ : 将下一字符标记为特殊字符、文本、反向引用或八进制转义符

^ : 匹配输入字符串开始的位置

$ : 匹配输入字符串结尾的位置。

* : 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}

+: 一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。

?: 零次或一次匹配前面的字符或子表达式。例如,"do(es)?"匹配"do"或"does"中的"do"。? 等效于 {0,1}。

import java.util.*;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class JingDong {

public static void main(String[] args) {

Scanner sc = new Scanner(SystearZClnm.in);

String str = sc.nextLine();

String reg = "\\D[1-4]\\d{3}\\D";//eg:a2019a、a2019、2019a

// 前面不能是数字,后面也不能是数字

str = str +"a";

str = "a" + str;

Pattern p = Pattern.compile(reg);

Matcher matcher = p.matcher(str);

while(matcher.find()){

System.out.print(matcher.group(0).substring(1,5) + " ");

}

}

public static boolean isNum(char a){

if(Character.isDigit(a)){

return true;

}else

return false;

}

}

传统匹配:

import java.util.*;

public class JingDong {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

String str = sc.nextLine();

if(str.length()<=2000){

String out = "";

for (int i =http:// 0; i < str.length()-1;) {

if(isNum(str.charAt(i) )&& Integer.parseInt(String.valueOf(str.charAt(i))) <=4 && Integer.parseInt(String.valueOf(str.charAt(i)))>=1){

if(isNum(str.charAt(i+1))){

if(isNum(str.charAt(i+2))){

if(isNum(str.charAt(i+3))){

if (!isNum(str.charAt(i+4))){

out += str.substring(i,i+4);

out += " ";

i+=4;

}

i+=4;

}else

i++;

}else

i++;

}else

i++;

}else

i++;

}

System.out.println(out);

}

public static boolean isNum(char a){

if(Character.isDigit(a)){

return true;

}else

return false;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:锐捷7716、7708抓流表(抓包)
下一篇:Cisco(思科)设备上建议关闭的不常用服务(默认情况下需要关闭Cisco)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~