如何转换带有多余字符的字符串
字符串str =“文件-09-01-2024”
模式=“dd-MM-YYYY”
使用 SimpleDateFormat 和模式=“dd-MM-YYYY”
我不知道还能有多少个额外的符号
使用正则表达式提取
dd-MM-YYYY
部分。
匹配它的简单正则表达式可能是\d{2}-\d{2}-\d{4}
。这匹配 2 个数字、一个连字符、2 个数字、一个连字符,然后是 4 个数字。您可以在 regex101 上测试它:https://regex101.com/r/socnHp/1.
示例:
String str = "file-09-01-2024"
Matcher matcher = Pattern.compile("\\d{2}-\\d{2}-\\d{4}").matcher(str);
matcher.find();
String mmddyy = matcher.group(); // this gets the first substring that matches the regex
Date parsed = new SimpleDateFormat("dd-MM-yyyy").parse(mmddyy);
我提供的正则表达式仍然会匹配不正确的日期,例如 09-14-2024。我相信对于您的用例来说这很好,但如果您需要更严格的验证,您可以在本网站上检查类似的问题,例如this one。
String#substring
方法提取相关部分。
String input = "file-09-01-2024" ;
String datePortion = input.substring( input.length() - 10 ) ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd-MM-uuuu" ) ;
LocalDate ld = LocalDate.parse( datePortion , f ) ;
请参阅此 在 Ideone.com 上运行的代码。
当然,理想的解决方案是教育数据发布者:
使用简单日期格式
切勿使用
SimpleDateFormat
、Date
、Calendar
等
这些存在严重缺陷的类现在已成为遗留类,多年前已被 JSR 310 中定义的现代 java.time 类所取代。