草庐IT

java - 如何使用正则表达式有效地向后搜索?

我正在使用正则表达式在字符串数组中向前搜索,如下所示:for(intj=line;j请注意,在我上面的实现中,我保存了line和offset以进行连续搜索。无论如何,现在我想从[line,offset]开始向后搜索。我的问题:有没有一种方法可以有效地使用正则表达式向后搜索?如果没有,有什么替代方案?澄清:向后是指找到上一个匹配项。例如,假设我在中搜索“dana”"dananama?danakama!lamadanakama?"并进入第二场比赛。如果我再次执行matcher.find(),我将搜索forward并获得第3个匹配项。但我想向后搜索并找到第一个匹配项。上面的代码应该输出如下内

java转义括号

我有这个小类(class)可以对字符串进行多次替换:importjava.util.HashMap;importjava.util.Map;importjava.util.regex.Matcher;importjava.util.regex.Pattern;importorg.apache.commons.lang.StringUtils;publicclassMultipleReplace{publicstaticvoidmain(String[]args){Maptokens=newHashMap();tokens.put(":asd:","");tokens.put(":)",

java - Matcher.find() 如何工作

这个问题在这里已经有了答案:SCJP6regexissue(1个回答)关闭7年前。我正在测试Matcher和Pattern类的一个小stub...请参阅以下小stub..packagescjp2.escape.sequence.examples;importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassSample_19{publicstaticvoidmain(Stringa[]){Stringstream="ab34ef";Patternpattern=Pattern.compile("\\d*")

java - 在文本中展开环境变量

我正在尝试编写一个函数来执行java中环境变量的替换。所以如果我有一个看起来像这样的字符串:User${USERNAME}'sAPPDATApathis${APPDATA}.我想要的结果是:Usermsmith'sAPPDATApathisC:\Users\msmith\AppData\Roaming.到目前为止,我的失败实现如下所示:publicstaticStringexpandEnvVars(Stringtext){MapenvMap=System.getenv();Stringpattern="\\$\\{([A-Za-z0-9]+)\\}";Patternexpr=Patte

java - 从字符串末尾获取整数(可变长度)

我有一个可变长度的字符串,在字符串的末尾有一些数字。解析字符串并从末尾获取数字作为整数的最佳/有效方法是什么?字符串和末尾的数字可以是任意长度。例如:abcd123-->123abc12345-->12345ab4cd1-->1 最佳答案 类似的东西:finalstaticPatternlastIntPattern=Pattern.compile("[^0-9]+([0-9]+)$");Stringinput="...";Matchermatcher=lastIntPattern.matcher(input);if(matcher.

java - Matcher.appendReplacement 用文字文本

我正在使用Matcher.appendReplacement()在我的替换字符串中有$2之前,它工作得很好:Notethatbackslashes(\)anddollarsigns($)inthereplacementstringmaycausetheresultstobedifferentthanifitwerebeingtreatedasaliteralreplacementstring.Dollarsignsmaybetreatedasreferencestocapturedsubsequencesasdescribedabove,andbackslashesareusedtoe

java - EasyMock : java. lang.IllegalStateException : 1 matchers expected, 2 记录

我在使用EasyMock2.5.2和JUnit4.8.2(通过Eclipse运行)时遇到问题。我在这里阅读了所有类似的帖子,但没有找到答案。我有一个包含两个测试相同方法的测试的类。我正在使用匹配器。单独运行时每个测试都会通过。第一个测试总是通过-如果我在文件中切换测试顺序,情况就是如此。这是测试代码的简化版本:privateXthingmockXthing;privateMainThingmainThing;@BeforepublicvoidsetUp(){mockXthing=EasyMock.createMock(Xthing.class);mainThing=newMainThi

Java - 使用正则表达式提取字符串

我有这个字符串StringmyString="A~BC~FGH~~zuzy|XX~1234~~~ABC~01/01/201006:30~BCD~01/01/201107:45";我需要提取这3个子字符串123406:3007:45如果我使用这个正则表达式\\d{2}\:\\d{2}我只能提取第一个小时06:30PatterndepArrHours=Pattern.compile("\\d{2}\\:\\d{2}");Matchermatcher=depArrHours.matcher(myString);StringfirstHour=matcher.group(0);Stringse

java - 泛型 hell : hamcrest matcher as a method parameter

所以,让我们有一个字符串列表和一个接受Hamcrest匹配器并返回matches()的结果的函数。提供的匹配器的方法:publicbooleanmatchIt(finalMatcher>matcher){finalListlst=obtainListFromSomewhere();returnmatcher.matches(lst);}到目前为止一切顺利。现在我可以轻松调用:matchIt(empty());matchIt(anything());matchIt(hasItem("item"));matchIt(everyItem(equalToIgnoringCase("item")

java - 是否有 Hamcrest 匹配器来检查 Collection 既不为空也不为空?

是否有Hamcrest匹配器检查参数既不是空集合也不是null?我想我可以一直使用both(notNullValue()).and(not(hasSize(0))但我想知道是否有更简单的方法,但我错过了。 最佳答案 您可以结合IsCollectionWithSize和OrderingComparison匹配器:@Testpublicvoidtest()throwsException{Collectioncollection=...;assertThat(collection,hasSize(greaterThan(0)));}对于c