检查特定字符串是否存在于主机名中的最佳方法是什么?

时间:2015-03-09 23:04:12

标签: java string indexof

我有一个像p-desktop-1234565.teck.host.com这样的主机名,我需要检查它是否在teck域/数据中心内。如果主机名中包含teck,则任何主机名都位于.teck.域中。

作为示例,我们可能在其他数据中心(dc1, dc2, dc3)中有机器,因此主机名将是这样的 -

machineA.dc1.host.com
machineB.dc2.host.com
machineC.dc3.host.com

以同样的方式可能在teck域中有一些机器,所以我们可能有这样的主机名 -

machineD.teck.host.com

所以我需要检查是否有任何机器在teck数据中心。所以我有下面的代码可以正常工作 -

String hostname = getHostName();

if (hostname != null) {
    if (isTeckHost(hostname)) {
        // do something
    }
}

// does this look right or is there any other better way?
private static boolean isTeckHost(String hostName) {
    return hostName.indexOf("." + TECK.name().toLowerCase() + ".") >= 0;
}

我想检查indexOf是否是正确的使用方式?或者有更好或更有效的方法来做同样的事情?

注意:这段代码在我的Enum类中,其中声明了TECK。

2 个答案:

答案 0 :(得分:2)

如果您只需要检查字符串是否包含另一个字符串,请使用String的contains()方法。例如:

if(hostName.toLowerCase().contains("." + TECK.name().toLowerCase() + "."))

如果您需要检查字符串是否位于主机名中的某个位置(例如,在第一个句点之前,第二个句点之前,等等),请使用String的split方法。例如:

if(hostName.toLowerCase().split("\\.")[1].equals(TECK.name().toLowerCase()))

split()返回一个字符串数组,该数组包含调用它的字符串中的子字符串,该子字符串除以某个正则表达式模式,在这种情况下是一个句号。

例如,当在字符串split("\\.")上调用p-desktop-1234565.teck.host.com时,它将返回以下数组: {"p-desktop-1234565", "teck", "host", "com"}。然后我们检查(使用[1])数组中的第二项是否等于“teck”。

答案 1 :(得分:1)

虽然使用包含方法通常是安全的,但出于这样的目的,我建议split().equals()的组合

例如:

String[] x = hostname.split("\."); // this splits the string, and since the host is always in the second spot, you can do the following
if (x[1].equals(TECK.name().toLowerCase())) { 
    // do your stuff 
}

这个更安全,因为我不能用类似的字符串打破它 machineE.dc4.teck.com(假设不允许这样做)