【问题标题】:Most efficient way of doing a find / replace on a large string for certain character sequences in Java在Java中对某些字符序列的大字符串进行查找/替换的最有效方法
【发布时间】:2012-02-14 10:35:26
【问题描述】:

我想知道什么是最快、最有效的方法(使用 JAVA)来搜索大字符串并进行查找替换,例如:

找到

'http://www.stackoverflow.com' 

在一个长字符串的主体内并用

替换它
'<a href="http://www.stackoverflow.com">http://www.stackoverflow.com</a>' 

现在,在您建议使用 XSL 执行此操作之前,它已经不可能了。

简而言之,我想知道如何在长字符串中找到任何 URL 实例,并用适当的元素包装它,这样当页面在网络上呈现时,它会自动链接。谢谢。

【问题讨论】:

  • 长字符串的其余部分是 HTML 吗?
  • 我在 XSL 中尝试过只是为了实现我使用的框架只支持 XSL 1.0 哈哈。长字符串不是 HTML,只是纯文本,如果检测到“www.google.com”,则应自动链接

标签: java string search contains


【解决方案1】:

当然,我越想这个,我就越想知道是否有更好的解决方案。我已将其作为不同的答案分开,因为它不是您问题的直接答案,但是,它是您问题的潜在解决方案。

您可以让 Web 浏览器本身进行自动链接,而不是用 Java 解析所有内容。已经有几个 JS 库可以执行这项工作。您可以轻松地在 JQuery 中编写代码来为您完成此任务,或者使用其他人编写的现有插件。

快速的 Google 搜索发现 http://codesnipp.it/javascript/jquery-plugin-to-auto-link-urls 是 JQ 插件。

【讨论】:

    【解决方案2】:

    如果您正在寻找文字字符串,请不要使用正则表达式。只需使用 String.replace 进行文字替换。

    【讨论】:

    • 同意 - 效率更高,但他的问题更进一步,表明他正在寻找一种将所有 url 包装在 html 标签中的通用方法。
    【解决方案3】:

    我不知道最有效的(CPU 周期),但我会使用 RegEx'es。从程序化的角度来看,它们绝对是最快、最高效、最干净的。

    您可以使用PatternMatcher(参见http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html),或者更简单的是使用已经是String 对象一部分的快捷方法String.replaceAll

    myString.replaceAll( "(<URL REGEX>)", "New String $1 Here" );
    

    其中 $1 被替换为与搜索字符串中的组 #1 匹配的任何内容。您还可以在编码时使用在线工具测试正则表达式,例如http://www.fileformat.info/tool/regex.htm

    根据您需要做的正则表达式匹配类型,您可以尝试以下正则表达式,或者快速在线搜索一个更好的。

    (http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?
    

    如果您以前从未使用过正则表达式,那么一旦开始,您就会爱上它们。当然,正则表达式的缺点是它们比简单的搜索或替换要慢,但要灵活得多。

    祝你好运。

    埃里克

    【讨论】:

      【解决方案4】:

      正则表达式助你一臂之力!看这个问题Regular expression to match URLs in Java

      只需使用来自Matcher 的查找和替换,而不是像上一个问题中那样查找它。

      为了完整起见,这里是 some code,它可以满足您的需求。

      注意:假设您在要替换的字符串中已经有一个带有 URL 的锚标记,您不能使用 REGEX,并且必须将文本解析为 HTML,并且在运行 regex 替换之前只查看文本节点。

      【讨论】:

      • @TedPrz 很高兴你得到了我的推荐信。遗憾的是,正则表达式不足以完美地做到这一点,但它做得非常好。
      猜你喜欢
      • 2012-09-09
      • 2012-01-05
      • 2012-03-30
      • 1970-01-01
      • 2020-01-23
      • 2011-08-15
      • 2019-04-06
      • 1970-01-01
      • 2011-05-16
      相关资源
      最近更新 更多