栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

解析前确定字符串是否为有效日期

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解析前确定字符串是否为有效日期

有关如何使用类型消除try /
catch块的概述,请参见Java中的惰性错误处理

Option

功能性Java是您的朋友。

本质上,您想要做的是将日期解析包装在一个不会抛出任何东西的函数中,而是在其返回类型中指示解析是否成功。例如:

import fj.F; import fj.F2;import fj.data.Option;import java.text.SimpleDateFormat;import java.text.ParseException;import static fj.Function.curry;import static fj.Option.some;import static fj.Option.none;...F<String, F<String, Option<Date>>> parseDate =  curry(new F2<String, String, Option<Date>>() {    public Option<Date> f(String pattern, String s) {      try {        return some(new SimpleDateFormat(pattern).parse(s));      }      catch (ParseException e) {        return none();      }    }  });

好的,现在您有了一个可重用的日期解析器,它不会抛出任何东西,但是会通过返回type值来指示失败

Option.None
。使用方法如下:

import fj.data.List;import static fj.data.Stream.stream;import static fj.data.Option.isSome_;....public Option<Date> parseWithPatterns(String s, Stream<String> patterns) {   return stream(s).apply(patterns.map(parseDate)).find(isSome_()); }

这将为您提供与第一个匹配的模式(或类型为Option.None的值)解析的日期,该值是类型安全的,而null不是。

如果您想知道什么

Stream
是…,这是一个懒惰的清单。这样可以确保您在第一个成功的模式之后忽略模式。不需要做太多的工作。

像这样调用您的函数:

for (Date d: parseWithPatterns(someString, stream("dd/MM/yyyy", "dd-MM-yyyy")) {  // Do something with the date here.}

要么…

Option<Date> d = parseWithPatterns(someString,  stream("dd/MM/yyyy", "dd-MM-yyyy"));if (d.isNone()) {  // Handle the case where neither pattern matches.} else {  // Do something with d.some()}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452821.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号