我如何找到日期和时间的第一个索引在Java字符串



我有一个YYYY-MM-DD HH:MM:SS日期和时间格式的字符串,格式如下:

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)";

我想从字符串中提取"ABC-007: This is a dummy DCS error message.">这部分并忽略所有异常堆栈跟踪。

我在想如果我得到日期的索引,我可以做一个从索引0到日期索引的子字符串。

我不擅长正则表达式,所以没有尝试任何东西。提前谢谢。

假设时间戳是正确的标记,您可以尝试将其与以下所有内容一起剥离:

String output = JAVA_STACK_TRACE.replaceAll("\s+\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.*$", "");
System.out.println(output);

这个打印:

ABC-007: This is a dummy ABC error message. This message can have multiple sentences.

Tim Biegeleisen的简单代码似乎是获得您真正目标的最佳方法:提取日期之前的消息。

既然您要求日期的索引,为了完整性,我想向您展示正则表达式也可以用于此:

Pattern p = Pattern.compile("\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3}");
Matcher m = p.matcher(JAVA_STACK_TRACE);

if (m.find()) {
int indexOfDateAndTime = m.start();
System.out.println("Index: " + indexOfDateAndTime);
} else {
System.out.println("Not found");
}

输出:

指数:86

Matcherstart()方法给出了匹配开始位置的索引,即第一个匹配的字符。有一个相应的end方法给出了最后一个字符匹配后的偏移量。

如果你想要的只是信息,这是一个弯路。

相关内容

  • 没有找到相关文章