【问题标题】:Need a scala functional code for validating ipv4 and ipv6需要用于验证 ipv4 和 ipv6 的 scala 功能代码
【发布时间】:2020-06-15 05:19:33
【问题描述】:

我试图构建解析 IP 地址的功能程序。我看到一个错误。我想要一个更简单的代码来区分 ipv4 和 ipv6。这是JAVA代码。

import java.util.regex.Pattern;
class Solution {
  String chunkIPv4 = "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])";
  Pattern pattenIPv4 =
          Pattern.compile("^(" + chunkIPv4 + "\\.){3}" + chunkIPv4 + "$");

  String chunkIPv6 = "([0-9a-fA-F]{1,4})";
  Pattern pattenIPv6 =
          Pattern.compile("^(" + chunkIPv6 + "\\:){7}" + chunkIPv6 + "$");

  public String validIPAddress(String IP) {
    if (pattenIPv4.matcher(IP).matches()) return "IPv4";
    return (pattenIPv6.matcher(IP).matches()) ? "IPv6" : "Neither";
  }
} 

【问题讨论】:

  • 您看到的错误是什么?
  • 那是 Java,而不是 Scala
  • @stefanobaghino 我更新了代码以在 scala 上进行规则。它未能通过“172.16.254.1”的测试用例。代码:var chunkIPv4: String = "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]| 25[0-5])" var pattenIPv4: Pattern = Pattern.compile("^(" + chunkIPv4 + "\\.){3}" + chunkIPv4 + "$") var chunkIPv6: String = "([0- 9a-fA-F]{1,4})" var pattenIPv6: Pattern = Pattern.compile("^(" + chunkIPv6 + "\\:){7}" + chunkIPv6 + "$") def validIPAddress(IP: String): String = { if (pattenIPv4.matcher(IP).matches()) "IPv4" if ((pattenIPv6.matcher(IP).matches())) "IPv6" else "Neither" }

标签: scala functional-programming scala-collections


【解决方案1】:

假设您在评论中编写的 scala 解决方案具有以下内容:

  def validIPAddress(IP: String): String = {
    if (pattenIPv4.matcher(IP).matches()) "IPv4"
    if (pattenIPv6.matcher(IP).matches()) "IPv6"
    else "Neither"
  }

第一个if 行将被评估,但如果没有return 关键字就不会返回,因此它将通过下一个条件。 你可以通过两种方式解决这个问题,一种是添加return

if (pattenIPv4.matcher(IP).matches()) return "IPv4"

或者最好在第二行添加一个else,这样你就可以避免return,因为整个事情将被评估为一个表达式:

  def validIPAddress(IP: String): String = {
    if (pattenIPv4.matcher(IP).matches()) "IPv4"
    else if (pattenIPv6.matcher(IP).matches()) "IPv6"
    else "Neither"
  }

另外,作为旁注,所有这些 vars 都可以是 vals,因为您没有改变它们,并且在 scala 中保证它们始终具有相同的值是一个很好的做法。

【讨论】:

    猜你喜欢
    • 2012-03-01
    • 2014-11-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2023-04-01
    • 2018-09-15
    • 1970-01-01
    相关资源
    最近更新 更多