需要用于验证ipv4和ipv6的scala功能代码

问题描述 投票:0回答:1

我正在尝试构建用于解析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";
  }
} 
scala functional-programming scala-collections
1个回答
0
投票

假设您在注释中编写的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"
  }

此外,请注意,所有那些var都可以是val,因为您没有对其进行突变,因此在scala中,最好保证它们始终具有相同的值。

© www.soinside.com 2019 - 2024. All rights reserved.