Нужен scala функциональный код для проверки ipv4 и ipv6 - PullRequest
0 голосов
/ 03 марта 2020

Я пытался создать функциональную программу для разбора 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";
  }
} 

1 Ответ

0 голосов
/ 03 марта 2020

Предполагая, что ваше 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 s могут быть val s, так как вы не изменяете их, и в scala рекомендуется иметь гарантию, что они всегда будут иметь одинаковое значение.

...