使用Guava CharMatcher和Apache Commons Lang StringUtils确定字符串中字符或整数的存在

最近Reddit上的帖子提出了一个问题:“ 是否存在一种预定义的方法来检查变量值是否包含特定字符或整数? ”基于问题的标题也被以另一种方式问到,“一种检查变量是否包含诸如列表之类的数字的方法或快速方法,例如或('x',2,'B')?” 我不知道标准SDK库中有任何单个方法可以执行此操作(除了使用精心设计的正则表达式),但是在本文中,我使用Guava的CharMatcher和Apache Common Lang的StringUtils类回答了这些问题。

Java的String类确实有一个包含方法 ,如果一个字符被包含在可用于确定String或者字符的某个明确指定序列中包含的String 。 但是,我不知道在单个可执行语句(不计算正则表达式)中以任何方式询问Java给定的String是否包含指定的一组字符中的任何一个,而不必包含所有字符或以指定顺序包含它们。 Guava和Apache Commons Lang都提供了针对此问题的机制。

Apache Commons Lang (本文中使用的3.1版 )提供了重载的StringUtils.containsAny方法,可以轻松完成此请求。 这两个重载版本都希望传递给它们的第一个参数是要测试的String (或更确切地说是CharSequence ),以查看它是否包含给定的字母或整数。 第一个重载版本StringUtils.containsAny(CharSequence,char…)接受零个或多个要测试的char元素,以查看是否有任何元素在第一个参数表示的String中。 第二个重载版本StringUtils.containsAny(CharSequence,CharSequence)期望第二个参数包含要在第一个参数中搜索的所有潜在字符作为单个字符序列。

以下代码清单演示了如何使用这种Apache Commons Lang方法来确定给定的字符串是否包含某些字符。 这三个语句都将通过其断言,因为“受实际事件启发”确实包含“ d”和“ A”,但不包括“ Q”。 因为只需要提供的任何一个字符都返回true,就可以通过true的前两个断言。 第三个断言通过了,因为字符串不包含唯一提供的字母,因此否定断言。

确定字符串包含具有StringUtils的字符

private static void demoStringContainingLetterInStringUtils()
{assert StringUtils.containsAny("Inspired by Actual Events", 'd', 'A');  // true: both containedassert StringUtils.containsAny("Inspired by Actual Events", 'd', 'Q');  // true: one containedassert !StringUtils.containsAny("Inspired by Actual Events", 'Q');      // true: none contained (!)
}

Guava的CharMatcher也可以按照下一个代码清单所示的类似方式使用。

使用CharMatcher确定字符串包含一个字符

private static void demoStringContainingLetterInGuava()
{assert CharMatcher.anyOf("Inspired by Actual Events").matchesAnyOf(new String(new char[]{'d', 'A'}));assert CharMatcher.anyOf("Inspired by Actual Events").matchesAnyOf(new String (new char[] {'d', 'Q'}));assert !CharMatcher.anyOf("Inspired by Actual Events").matchesAnyOf(new String(new char[]{'Q'}));
}

如果我们特别想确保给定String / CharSequence中的至少一个字符是数字(整数),但是我们不能保证整个字符串都是数字,该怎么办? 可以在上面应用与Apache Commons Lang的StringUtils相同的方法,唯一的变化是要匹配的字母是数字0到9。这在下一个屏幕快照中显示。

确定字符串包含StringUtils的数字

private static void demoStringContainingNumericDigitInStringUtils()
{assert !StringUtils.containsAny("Inspired by Actual Events", "0123456789");assert StringUtils.containsAny("Inspired by Actual Events 2013", "0123456789");
}

番石榴的CharMatcher具有一种CharMatcher方式来表达这个问题,即所提供的字符序列是否至少包含一个数字。 这显示在下一个代码清单中。

使用CharMatcher确定字符串包含数字

private static void demoStringContainingNumericDigitInGuava()
{assert !CharMatcher.DIGIT.matchesAnyOf("Inspired by Actual Events");assert CharMatcher.DIGIT.matchesAnyOf("Inspired by Actual Events 2013");
}

CharMatcher.DIGIT提供了一种简洁明了的方法来指定我们要匹配的数字。 幸运的是, CharMatcher提供了许多类似于DIGIT其他公共字段 ,以便于确定字符串是否包含其他类型的字符。

为了完整起见,我在下一个代码清单中包含了包含上述所有示例的单个类。 此类的main()函数可以在Java启动器上设置-enableassertions (或-ea ) 标志的情况下运行,并且无需任何AssertionError即可完成。

StringContainsDemonstrator.java

package dustin.examples.strings;import com.google.common.base.CharMatcher;
import static java.lang.System.out;import org.apache.commons.lang3.StringUtils;/*** Demonstrate Apache Commons Lang StringUtils and Guava's CharMatcher. This* class exists to demonstrate Apache Commons Lang StringUtils and Guava's* CharMatcher support for determining if a particular character or set of* characters or integers is contained within a given* * This class's tests depend on asserts being enabled, so specify the JVM option* -enableassertions (-ea) when running this example.* * @author Dustin*/
public class StringContainsDemonstrator
{private static final String CANDIDATE_STRING = "Inspired by Actual Events";private static final String CANDIDATE_STRING_WITH_NUMERAL = CANDIDATE_STRING + " 2013";private static final char FIRST_CHARACTER = 'd';private static final char SECOND_CHARACTER = 'A';private static final String CHARACTERS = new String(new char[]{FIRST_CHARACTER, SECOND_CHARACTER});private static final char NOT_CONTAINED_CHARACTER = 'Q';private static final String NOT_CONTAINED_CHARACTERS = new String(new char[]{NOT_CONTAINED_CHARACTER});private static final String MIXED_CONTAINED_CHARACTERS = new String (new char[] {FIRST_CHARACTER, NOT_CONTAINED_CHARACTER});private static final String NUMERIC_CHARACTER_SET = "0123456789";private static void demoStringContainingLetterInGuava(){assert CharMatcher.anyOf(CANDIDATE_STRING).matchesAnyOf(CHARACTERS);assert CharMatcher.anyOf(CANDIDATE_STRING).matchesAnyOf(MIXED_CONTAINED_CHARACTERS);assert !CharMatcher.anyOf(CANDIDATE_STRING).matchesAnyOf(NOT_CONTAINED_CHARACTERS);}private static void demoStringContainingNumericDigitInGuava(){assert !CharMatcher.DIGIT.matchesAnyOf(CANDIDATE_STRING);assert CharMatcher.DIGIT.matchesAnyOf(CANDIDATE_STRING_WITH_NUMERAL);}private static void demoStringContainingLetterInStringUtils(){assert StringUtils.containsAny(CANDIDATE_STRING, FIRST_CHARACTER, SECOND_CHARACTER);assert StringUtils.containsAny(CANDIDATE_STRING, FIRST_CHARACTER, NOT_CONTAINED_CHARACTER);assert !StringUtils.containsAny(CANDIDATE_STRING, NOT_CONTAINED_CHARACTER);}private static void demoStringContainingNumericDigitInStringUtils(){assert !StringUtils.containsAny(CANDIDATE_STRING, NUMERIC_CHARACTER_SET);assert StringUtils.containsAny(CANDIDATE_STRING_WITH_NUMERAL, NUMERIC_CHARACTER_SET);}/*** Indicate whether assertions are enabled.* * @return {@code true} if assertions are enabled or {@code false} if*    assertions are not enabled (are disabled).*/private static boolean areAssertionsEnabled(){boolean enabled = false; assert enabled = true;return enabled;}/*** Main function for running methods to demonstrate Apache Commons Lang* StringUtils and Guava's CharMatcher support for determining if a particular* character or set of characters or integers is contained within a given* String.* * @param args the command line arguments Command line arguments; none expected.*/public static void main(String[] args){if (!areAssertionsEnabled()){out.println("This class cannot demonstrate anything without assertions enabled.");out.println("\tPlease re-run with assertions enabled (-ea).");System.exit(-1);}out.println("Beginning demonstrations...");demoStringContainingLetterInGuava();demoStringContainingLetterInStringUtils();demoStringContainingNumericDigitInGuava();demoStringContainingNumericDigitInStringUtils();out.println("...Demonstrations Ended");}
}

Guava和Apache Commons Lang在Java开发人员中非常受欢迎,因为它们提供的方法超出了SDK开发人员通常需要的SDK。 在本文中,我研究了如何使用Guava的CharMatcher和Apache Commons Lang的StringUtils进行简洁而富有表现力的测试,以确定提供的字符串中是否存在一组指定字符。

参考: 在我们的Inspired by Actual Events博客中,使用我们的JCG合作伙伴 Dustin Marx的Guava CharMatcher和Apache Commons Lang StringUtils确定字符串中字符或整数的存在 。

翻译自: https://www.javacodegeeks.com/2014/01/determining-presence-of-characters-or-integers-in-string-with-guava-charmatcher-and-apache-commons-lang-stringutils.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365738.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

rust为什么显示不了国服_Rust编程语言初探

静态、强类型而又不带垃圾收集的编程语言领域内,很久没有新加入者参与竞争了,大概大部分开发者认为传统的C/C的思路已经不太适合新时代的编程需求,即便有Ken Tompson这样的大神参与设计的golang也采用了GC的思路来设计其新一代的语言&#xf…

wps表格粗线和细线区别_详解论文中的表格技术

今天我们主要学习的技能如下:• 怎样用word做论文要求的三线表• 三线表中辅助线的断开• 表格或者图片自动编号1. 先普及一下,论文中的三线表吧。三线表以其形式简洁、功能分明、阅读方便而在科技论文中被推荐使用。三线表通常只有3条线,即顶…

素材

svg: www.sfont.cn/svg/ehed7f 转载于:https://juejin.im/post/5b9b70a8e51d450e4b1bdd33

如何自定义CSS滚动条的样式?

欢迎大家前往腾讯云 社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表 本文会介绍CSS滚动条选择器,并在demo中展示如何在Webkit内核浏览器和IE浏览器中,自定义一个横向以及一个纵向的滚动条。 0.需求 有的时候我们不想使用浏览器默…

RabbitMQ基础知识

RabbitMQ基础知识 一、背景RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 COBAR的 IIOP ,或者是 …

使用Spring RestTemplate和Super类型令牌消费Spring-hateoas Rest服务

Spring-hateoas为应用程序创建遵循HATEOAS原理的基于REST的服务提供了一种极好的方法。 我的目的不是要展示如何创建服务本身,而是要展示如何将客户端写入服务。 我将要使用的示例服务是Josh Long( starbuxman )编写的“ the-spring-rest-s…

ansible-playbook 实战案例 全网备份 实时备份

目录 ansible-playbook 基础介绍1.YAML三板斧2. ansible playbook 安装apache 示例案例 全网备份 实时备份环境规划目录规划base.yamlrsync.yamlnfs.yamlsersync.yamlweb.yamlmail.yamlansible-playbook 基础介绍 playbook是由一个或多个模块组成的,使用多个不同的模…

iview 级联选择组件_使用 element-ui 级联插件遇到的坑

需求描述【省市区三级联动】组件:Cascader 级联选择器后端需要所选中的地区的名字,如:[北京市, 北京市, 东城区]获取后端省市区具体列表的接口返回数据:// 省 - 参数1 [{value: 1,label: 北京市},... ] // 市 - 参数2 [{value: 1,…

python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

Python高级编程——装饰器Decorator超详细讲解(上篇)送你小心心记得关注我哦!! 进入正文全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向对象的设计或者是使用相…

深入理解CPU和异构计算芯片GPU/FPGA/ASIC (上篇)

王玉伟,腾讯TEG架构平台部平台开发中心基础研发组资深工程师,专注于为数据中心提供高效的异构加速云解决方案。目前,FPGA已在腾讯海量图片处理以及检测领域已规模上线。 随着互联网用户的快速增长,数据体量的急剧膨胀,…

jenkins-基础配置

一,配置远程连接服务器 系统管理 --> 系统设置 SSH remote hosts 二,设置docke的URL(设置jenkins构建镜像时候所连接的docker url ,参考 docker开启远程访问https://www.cnblogs.com/galsnag/articles/10069709.html&#xf…

JSF:直接从页面将参数传递给JSF操作方法,这是JavaEE 6+的一个不错的功能

Java企业版JavaEE 6中提供的JSF 2的一项不错的功能是,您可以将参数传递给任何操作组件(例如commandButton或commandLink组件)的操作方法。 基于此,您可以最大程度地减少托管bean中的方法数量。 另外,为了最小化在bea…

CCF CSP个人题解汇总

趁着这波考CCF热来骗一波访问量 祝自己免修算法RP 区域赛RP 1、2题汇总在这:https://www.cnblogs.com/QAQorz/p/9650890.html 201803-4 棋局评估(对抗搜索):https://www.cnblogs.com/QAQorz/p/9650828.html 201709-4 通信网络&…

海洋主题绘画_深圳举办风帆时代海洋绘画作品展,展出作品600余件

12月12日,第七届《风帆时代海洋绘画作品展》在位于蛇口邮轮中心3楼的深圳大学海洋文化科普教育基地举行开幕仪式。该项目得到深圳市宣传文化事业专项基金支持,由深圳大学海洋艺术研究中心主办,深圳市海洋文化艺术研究会承办。作为开幕式重要环…

不要被约束的意思_不要再奢望你会变得自律了丨“他律”比“自律”更重要

高三寒假和同学打赌一个假期做完400套卷子。否则给他1000元。。。然后每天早上六点晚上12点,春节也没过,最后做完了卷子,我也完成了自己的梦想!!!然而上面这个大神不是我,是我引用的一颗真实栗子…

一篇文章为你深度解析HTTPS 协议

一、前言 微信小程序如期发布,开发者在接入微信小程序过程中,会遇到以下问题: 小程序要求必须通过 HTTPS 完成与服务端通信,若开发者选择自行搭建 HTTPS 服务,那需要自行 SSL 证书申请、部署,完成 https …

Shadow DOM及自定义标签

参考链接:点我 一、什么是Shadow DOM Shadow DOM,直接翻译的话就是 影子 DOM,可以理解为潜藏在 DOM 结构中并且我们无法直接控制操纵的 DOM 结构。类似于下面这种结构 Shadow DOM 可以在浏览器中生成一个独立于DOM树之外的 DOM结构 二、Shado…

二进制逆向工程师_利用Ghidra逆向分析Go二进制程序(下篇)

(接上文)动态分配字符串结构在第一种情况下,字符串结构是在运行时创建的,为此,需要使用一系列汇编指令在字符串操作之前设置相应的结构。由于指令集的不同,不同的架构之间的结构也是不同的。让我们通过几个案例,来展示…

工艺路线和工序有差别吗_你知道吗?市政道路排水工程的主要工序施工工艺是什么...

易筑教育给排水课程火热招生中!张老师微信号:yizhujiaoyu999市政道排工程施工遵循的基本顺序是:先地下,后地上;先深后浅。按照这个顺序,正常的施工顺序为基础处理、排水管道(涵)施工(雨、污水)、道路基层(常…

如何:从Spring 4.0快速入门以构建简单的REST-Like API(演练)

如何:从Spring 4.0快速入门以构建简单的REST-Like API(演练) 关于使用Spring MVC创建Web API的另一篇教程。 不太复杂。 只是一个演练。 生成的应用程序将提供简单的API,将Mongo作为其持久性,并将通过Spring Security进…