首页>Program>source

我正在运行一个比较程序,此刻它会进行直接的"字符串到字符串"比较,如果它们完全匹配,则输出为匹配。

好吧,我希望添加一个允许"相似性"的附加功能...

例如:

String em1 = "52494646";
String em2 = "52400646";

if (em1.equals(em2)){
    output.writeUTF(dir + filenames[i]);
}

这是一段代码片段.我希望它可以跳过" 00"并仍将其识别为"几乎"相同的数字并仍然输出。

我想它看起来像 String em2 = "524"+ ## +"646"   但这显然只是一个概念

有人知道是否有一种方法可以使用这种"通配符"(我从uni SQL中选出的一个术语),或者是否有另一种方法可以完成这种相似性类型交易。

谢谢:)

最新回答
  • 1月前
    1 #

    您可以使用正则表达式:

    if (em1.matches("524[0-9]{2}646")) {
      // do stuff
    }
    

  • 1月前
    2 #

    您可以使用正则表达式轻松解决它:

    if (em1.matches("524..646"))
    

    例如。

    .   是代表任何字符的通配符.您可以将其替换为 \\d   如果您想将通配符限制为数字。)

    这是一个更通用的变体,它对任何字符都匹配" 0":

    String em1 = "52494646";
    String em2 = "52400646";
    if (em1.matches(em2.replaceAll("0", "\\\\d"))){
        System.out.println("Matches");
    }
    

  • 1月前
    3 #

    我认为上述RE解决方案的问题在于,您对第3或第4位相同的数字不感兴趣,但对一位/两位数字却不感兴趣.

    这是一个更复杂的问题,但是您基本上想为您的两个字符串计算http://en.wikipedia.org/wiki/Hamming_distance.众所周知的解决许多问题的算法,因此您应该找到很多示例,但是我担心标准库不会这样做.而且它是一个for循环和一个计数器,因此您在实现上不会有问题-您失去了STL可以使用的一些优化潜力(比较两个字符串的地址,无论哪种情况,您都必须比较整个字符串),

  • 1月前
    4 #

    通常,您可以将startswith,endswith或Contains组合使用,以查找String的开头,结尾还是包含另一个字符串.您可以结合使用这些

    number.startsWith("524") && number.endsWith("646");
    

    使用正则表达式可能是95%的时间更好的选择,但更昂贵。

  • 1月前
    5 #

    正则表达式将是您要这样做的方式.对于您的示例,您需要像 "524\\d{2}646"这样的东西 .请参阅正则表达式的Java API。

    在这里也请参阅有用的Apache Commons IO库,因为听起来您正在处理文件:https://commons.apache.org/proper/commons-io/javadocs/api-release/index.html?org/ apache / commons / io / package-summary.html

  • jquery:如何使Google Maps再次请求位置权限?
  • C#中的队列实现