我有一个像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。
最佳答案
如果只需要检查一个字符串是否包含另一个字符串,请使用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”。