Java如何查找字符串中YYYY-MM-DD HH:MM:SS格式日期的首个索引
实现方案
你的思路完全可行,以下是可直接运行的Java实现:
方案1:按索引截取(推荐,更符合你设想的逻辑)
首先构造匹配YYYY-MM-DD HH:MM:SS格式的正则,匹配到第一个符合规则的时间戳的起始索引后直接截取:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class DateExtractTest { public static void main(String[] args) { String JAVA_STACK_TRACE = "ABC-007: This is a dummy ABC error message. This message can have multiple sentences." + " 2021-09-24 19:12:50,672 Exception in thread \"main\" java.lang.RuntimeException: A test exception" + " at com.stackify.stacktrace.StackTraceExample.methodB(StackTraceExample.java:13)" + " at com.stackify.stacktrace.StackTraceExample.methodA(StackTraceExample.java:9)" + " at com.stackify.stacktrace.StackTraceExample.main(StackTraceExample.java:5)"; // 匹配YYYY-MM-DD HH:MM:SS格式的正则 Pattern datePattern = Pattern.compile("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}"); Matcher matcher = datePattern.matcher(JAVA_STACK_TRACE); if (matcher.find()) { // 截取从0到第一个日期起始索引的内容,trim掉首尾空白 String targetContent = JAVA_STACK_TRACE.substring(0, matcher.start()).trim(); System.out.println(targetContent); } } }
运行后输出结果为:ABC-007: This is a dummy ABC error message. This message can have multiple sentences.
方案2:字符串分割简化实现
如果不需要精确控制索引,可以直接用正则作为分割符,取分割后的第一个元素即可:
String[] splitResult = JAVA_STACK_TRACE.split("\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}", 2); if (splitResult.length > 0) { String targetContent = splitResult[0].trim(); System.out.println(targetContent); }
注意:如果你的错误信息本身可能包含类似
YYYY-MM-DD HH:MM:SS格式的内容,需要调整正则规则加更严格的边界匹配,比如确保日期前面是空白字符,可以把正则改成\\s\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}即可。
内容的提问来源于stack exchange,提问作者Munjal
相关产品推荐
相关产品推荐

