0

我必须验证 EUI48 地址,目前我正在使用 for each 循环进行验证。我想使用正则表达式来做到这一点。但到目前为止还没有运气。

if(!input.matches("[0-9A-Fa-f]{12}+"));
            throw new SequenceException("IEEE/EUI48 does not contain a valid HEX value: " + input);

        setSubstitute(inputArgsMap.get(SUBSTITUTE_ID), input);

我对setSubstitute(inputArgsMap.get(SUBSTITUTE_ID), input);说“无法访问的声明”感到不满。

输入是一个字符串。

有人知道我在做什么错吗?:)

4

5 回答 5

1

您有一个;afterif语句,因此该throw语句将始终被执行,而不仅仅是在输入不匹配的情况下。

它应该是

if (!input.matches(...)) {
  throw new SequenceException(...);
}

setSubstitute(...);
于 2013-04-20T14:45:28.120 回答
1

删除 if 语句后的分号并使用大括号包围条件块的主体。目前执行的是条件语句,但其结果与是否抛出异常无关。事实上,异常总是被抛出,导致调用setSubstitute()不可达。

if(!input.matches("[0-9A-Fa-f]{12}+")){
    throw new SequenceException("IEEE/EUI48 does not contain a valid HEX value: " + input);
}

setSubstitute(inputArgsMap.get(SUBSTITUTE_ID), input);
于 2013-04-20T14:45:32.973 回答
1

您应该在“if”语句的末尾删除分号:

if(!input.matches("[0-9A-Fa-f]{12}+")) {
        throw new SequenceException("IEEE/EUI48 does not contain a valid HEX value: " + input);
}
于 2013-04-20T14:45:46.433 回答
1

原因是 if 语句后面的分号;它相当于指定一个空块,如下所示:

if(!input.matches("[0-9A-Fa-f]{12}+")) {
    /* Nothing */
}
throw new SequenceException("IEEE/EUI48 does not contain a valid HEX value: " + input);
setSubstitute(inputArgsMap.get(SUBSTITUTE_ID), input);

因此,您的代码总是会引发异常,并且setSubstitute永远不会调用到。

于 2013-04-20T14:45:55.230 回答
0

你的 if 语句不应该有 ; 在最后

于 2013-04-20T14:46:26.620 回答