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

guava和commons

最近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开发人员中非常受欢迎,因为它们提供的方法超出了Java开发人员通常需要的SDK所提供的范围。 在本文中,我研究了如何使用Guava的CharMatcher和Apache Commons Lang的StringUtils进行简洁CharMatcher测试,以确定所提供的字符串中是否存在一组指定字符。

参考: 在我们的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

guava和commons

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

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

相关文章

【渝粤题库】广东开放大学 财务会计(1) 形成性考核

选择题 题目:2012年12月初,某企业“坏账准备”科目贷方余额为6万元。12月31日,“应收账款”科目借方余额为100万元,经减值测试,该企业应收账款预计未来现金流量现值为95万元。该企业2012年末应计提的坏账准备金额为( …

python怎么把数据写进txt_python 如何将数据写入本地txt文本文件的实现方法

一、读写txt文件 1、打开txt文件 file_handle=open(1.txt,mode=w) 上述函数参数有(1.文件名,mode模式) mode模式有以下几种: #w 只能操作写入 r 只能读取 a 向文件追加 #w+ 可读可写 r+可读可写 a+可读可追加 #wb+写入进制数据 #w模式打开文件,如果而文件中有数据,再次写入…

工业互联网设备的网络安全管理与防护研究

从国家层面完善工业互联网设备的网络安全准入机制,建立设备网络安全检测认证体系,促进设备的网络安全架构研究和工程应用,强化设备的网络安全风险监测感知。 一、前言 工业互联网是新一代信息通信技术与工业体系融合的产物,做好…

反应式服务中的线程本地状态可用性

任何体系结构决策都需要权衡。 如果您决定采用反应式,也没有什么不同,例如,一方面使用反应式流实现几乎可以立即获得更好的资源利用率,但另一方面会使调试更加困难。 引入反应式库也对您的域产生巨大影响,您的域将不再…

【渝粤题库】陕西师范大学100101美学概论作业(高起本)

《美学概论》作业 一、写出下列美学著作的作者 1.《文艺对话集》 2.《Aesthetik》 3.《论语》 4.《文心雕龙》 5.《人间词话》 6.《美的历程》 7.《生活与美学》 8.《1844年经济学—哲学手稿》 9.《审美教育书简》 10.《判断力批判》 11.美是主客观的统一 12.美在和谐 13.美是…

【渝粤题库】陕西师范大学151205 财务管理原理作业(笔试题型)

《财务管理原理(专升本)》作业 一、单项选择题 1、融资租赁又称财务租赁,有时也称资本租赁。下列( )情形不属于融资租赁范围。 A、根据协议,企业将某项资产卖给出租人,再将其租回使用 B、由租赁…

自定义条件查询_数据查询不止有vlookup函数,自定义zlookup函数查询操作更高效...

Excel数据查询,相信大家首先会想到vlookup函数。毋庸置疑vlookup函数在Excel数据查询中作用是非常的强大。但是它也有一些不能实现的数据查询。如上图所示,我们需要根据人员的出现次数,提取第N次的数据。这里vlookup函数就无法使用&#xff0…

2021年中国工业互联网行业发展现状分析,“5G+工业互联网”驱动行业快速发展

一、概述 工业互联网是新一代信息通信技术与工业经济深度融合的新型基础设施、应用模式和工业生态,通过对人、机、物、系统等的全面连接,构建起覆盖全产业链、全价值链的全新制造和服务体系,为工业乃至产业数字化、网络化、智能化发展提供了…

【渝粤题库】陕西师范大学152212 政府绩效管理 作业(专升本)

陕西师范大学 内 部 题 库 教育 (yuyueshool) 编制 陕西师范大学 内 部 题 库 教育 (yuyueshool) 编制 《政府绩效管理》作业 一、单选题 1.( )是指公共服务部门将公共服务的内容、标准、程序和责任等公…

针对数能同传SWIPT的个人理解与总结Part1

无线数能同传(Simultaneous Wireless Information and Power Transfer, SWIPT)技术是指利用无线射频信号可同时携载信息与能量的特点,从一个射频信号中同时接收信息与能量的技术。 一、接收机架构 SWIPT有很多种解释,携能通信、…

【渝粤题库】陕西师范大学164111 Java及JSP动态网页编程与应用 作业 (高起专)

《JAVA与JSP动态网页编程与应用》作业 一、单选题 1.以下哪项都是关键字( ) A.package privati protect throw B. false final finally float C. this threadsafe super thread D. abstract bool break main 2.以下哪种循环体能保证进入执行&…

米筐量化不支持c语言_量化 | 从零开始学量化(三):数据获取途径

本系列的前两篇都是一些笼统的介绍,供小白制定学习计划时参考,现在该铺垫的都铺垫的差不多了。循序渐进,从本篇开始会写一些能实操的内容,尽量写的很细节,有任何问题欢迎私戳。本篇给出一些数据获取途径,基…

jvm破坏双亲委派_破坏JVM

jvm破坏双亲委派正如我们最近发现的那样,全面测试可能有害。 扩展测试覆盖范围导致我们仅花费一行代码就进行了几个小时的调试会话。 使调试特别令人不愉快的是,该代码不仅崩溃了所部署的JVM,而且还破坏了其下的虚拟机和/或物理机。 因此&am…

【渝粤题库】陕西师范大学165204 市场调查与分析方法 作业(专升本)

《市场调查与分析方法》作业 一、单选题 1、“某个行业的历史销售趋势是什么样的?”属于市场调查功能中的( ) A、描述 B、诊断 C、预测 D、重构 2、利用企业内部和外部现有的各种信息、情报资料,对调查内容进行分析研究的调查方法…

射频知识简介

无线通信系统中,一般包含有天线、射频前端、射频收发模块以及基带信号处理器四个部分。随着5G时代的,天线以及射频前端的需求量及价值均快速上升,射频前端是将数字信号向无线射频信号转化的基础部件,也是无线通信系统的核心组件。…

【渝粤题库】陕西师范大学200341实变函数作业(高起本、专升本)

《实变函数》作业 一.判断题 1. 可测的充要条件是可测。 ( ) 2.所有无理数构成的集合是可数集。 ( ) 3.如果在上单调减少,则在上可测。 ( ) 4&…

尽可能地做到无服务器,但不止于此

毫无疑问,如果您一直关注技术趋势,那么您会看到“无服务器”的兴起。 在某些情况下,“无服务器”被称为“下一个应用程序体系结构”样式。 我什至听说有人说“您不需要技术X,因为无服务器是未来的方式”或“技术X是红鲱鱼&#xf…

信号扫描_科研必备“武器”之扫描电子显微镜

仪器介绍扫描电子显微镜(英语名称为Scanning Electron Microscope,缩写为SEM),简称扫描电镜。它是一种电子显微镜,利用聚焦电子束扫描样品的表面来产生样品表面的图像。最常见的扫描电镜模式是检测由电子束激发的原子发…

【渝粤题库】陕西师范大学200711 面向对象方法与C++ 作业

《面向对象方法与C》作业 一、填空题 1.若char *string”test”;则如果要输出指针值,正确的语句是 。 2.在重载“[ ]”运算符时,必须使用 函数重载。 3.当用public继承时,基类的public成员成为派生类的 成员…

解决office一打开就显示正在更新,过一会就报错的问题

问题描述: 一打开office就显示正在更新,请稍后,过一会就弹窗报错。 解决方案: 1.winR输入services.msc 2.将Microsoft Office即点即用服务设为自动 如果第二步中已经是自动状态,先禁用一下,再重新设置为…