Tag: 正则表达式

什么是Java中最快的子字符串搜索方法

我需要实现一种使用Java搜索字符串(haystack)列表中的子字符串(针)的方法。 更具体地说,我的应用程序有一个用户配置文件列表。 如果我输入一些字母,例如“Ja”,然后搜索,则所有名称中包含“ja”的用户都应该显示。 例如,结果可能是“Jack”,“Jackson”,“Jason”,“Dijafu”。 在Java中,据我所知,有3种内置方法可以在字符串中查看搜索子字符串。 string.contains() string.indexOf() 正则表达式。 它就像string.matches(“ja”)) 我的问题是:上面每种方法的运行时间是多少? 哪一个是检查字符串列表是否包含给定子字符串的最快或最有效或最流行的方法。 我知道存在一些做同样事情的算法,例如Boyer-Moore字符串搜索算法,Knuth-Morris-Pratt算法等等。 我不想使用它们,因为我只有一小串字符串,我认为使用它们对我来说有点矫枉过正。 此外,我必须为这种非内置算法输入许多额外的编码。 如果您认为我的想法不正确,请随时纠正我。

Java:查找第一个Regex的索引

我需要更改一段代码包括: string.indexOf(“bc”) 怎么能通过一个跳过“bc”出现的解决方案来改变它,如果它前面有字母“a”。 我不想找到这些: ABC 但只有: 命苦 其中x可以是任何东西,但是(甚至是空的)。 我想我可以放入一个条件来检查索引i-1 == a,如果是,则再次调用indexOf方法。 但我不认为这将导致非常漂亮的代码。 使用正则表达式的解决方案如何? 编辑:看到一些回复后只是一个提示。 不仅可以获得正则表达式,而且还可以获得查找索引所需的API调用。

正则表达式从字符串中查找电子邮件地址

我的目的是从网页上获取电子邮件地址。 我有页面源。 我正逐行阅读页面源代码。 现在我想从我正在阅读的当前行获取电子邮件地址。 此当前行可能有也可能没有电子邮件。 我看到了很多正则表达式的例子。 但其中大多数都是用于validation电子邮件地址。 我想从页面源获取电子邮件地址而不是validation。 它应该工作http://emailx.discoveryvip.com/正在工作 一些示例输入行是: 1)Send details to neeraj@yopmail.com 2)Interested should send details directly to www.abcdef.com/abcdef/. Should you have any questions, please email neeraj@yopmail.com. 3)Note :- Send your queries at neeraj@yopmail.com for more details call Mr. neeraj 012345678901. 我想从示例1,2和3中获取neeraj@yopmail.com。我使用的是java,我在rexexp中表现不佳。 帮我。

找到与Java regex matcher的最后一场比赛

我试图获得匹配的最后结果,而不必循环通过.find() 这是我的代码: String in = “num 123 num 1 num 698 num 19238 num 2134”; Pattern p = Pattern.compile(“num ‘([0-9]+) “); Matcher m = p.matcher(in); if (m.find()) { in = m.group(1); } 这将给我第一个结果。 我怎样才能找到最后一场比赛,而不是通过潜在的巨大名单?

转义序列无效(有效转义序列为\ b \ t \ n \ f \ r \“\ \ \ \)

我在java中使用正则表达式有问题。 当我尝试使用这个正则表达式时: ^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$ 我收到以下错误 “Invalid escape sequence (valid ones are \b \t \n \f \r \” \’ \ )” 我不知道如何处理这个错误。 我已经尝试将反斜杠加倍,但它没有用。 我希望有人可以帮助我。 谢谢

Java RegEx Matcher.groupCount返回0

我知道这已被问到但我无法修复它 对于身体(西class牙语)的书籍对象: “quiero mas dinero” (实际上相当长一点) 我的Matcher一直返回0表示: String s=”mas”; // this is for testing, comes from a List int hit=0; Pattern p=Pattern.compile(s,Pattern.CASE_INSENSITIVE); Matcher m = p.matcher(mybooks.get(i).getBody()); m.find(); System.out.println(s+” “+m.groupCount()+” ” +mybooks.get(i).getBody()); hit+=m.groupCount(); 我一直在控制台上获得”mas 0 quiero mas dinero” 。 为什么哦为什么?

Java Regex – 减少字符串中的空格

我没有时间去理解正则表达式,我需要快速回答。 平台是Java。 我需要字符串 “Some text with spaces” ……被转换为 “Some text with spaces” 即,将2个或更多个连续空格改变为1个空格。

如何使用正则表达式替换括号中的字符串?

我有一个字符串: HLN (Formerly Headline News) 我想删除parens和parens中的所有内容,只留下: HLN 我试图用正则表达式做到这一点,但我的困难在于这种模式: “(.+?)” 当我使用它时,它总是给我一个PatternSyntaxException 。 我怎样才能修复我的正则表达式?

如何独立分割路径平台?

我正在使用以下代码来获取包含给定路径中所有子目录的数组。 String[] subDirs = path.split(File.separator); 我需要数组来检查某些文件夹是否在此路径中的正确位置。 这看起来是一个很好的解决方案,直到findBugs抱怨File.separator用作正则表达式。 似乎将Windows文件分隔符传递给正在构建正则表达式的函数是一个坏主意,因为反斜杠是一个转义字符。 如何在不使用File.separator的情况下以跨平台方式拆分路径? 或者这样的代码好吗? String[] subDirs = path.split(“/”);

String.replaceAll比自己完成工作慢得多

我有一段旧代码,用于在字符串中执行查找和替换标记。 它接收from和to的映射,迭代它们,对于每个对,迭代目标字符串,查找from使用indexOf() ,并用to的值替换它。 它完成StringBuffer上的所有工作,最终返回一个String 。 我用这一行替换了那段代码: replaceAll(“[,. ]*”, “”); 我进行了一些比较性能测试。 当比较1,000,000次迭代时,我得到了这个: 旧代码:1287ms 新代码:4605ms 3倍长! 然后我尝试用3次调用替换它来replace : replace(“,”, “”); replace(“.”, “”); replace(” “, “”); 结果产生了以下结果: 旧代码:1295 新代码:3524 2倍长! 任何想法为什么replace和replace都是如此低效? 我能做些什么来加快速度吗? 编辑:感谢所有答案 – 主要问题确实是[,. ]* [,. ]*没有做我想做的事。 将其改为[,. ]+ [,. ]+几乎等于非基于正则表达式的解决方案的性能。 使用预编译的正则表达式有所帮助,但是很少。 (这是一个非常适合我的问题的解决方案。 测试代码: 用正则表达式替换字符串:[,。 ] * 用正则表达式替换字符串:[,。 ] + 用正则表达式替换字符串:[,。 ] +和预编译模式