检查主机名中是否存在特定字符串的最佳方法是什么?
What is the best way to check whether a particular string is present in a hostname or not?
我有一个像这样的主机名 p-desktop-1234565.teck.host.com
,我需要检查它是否在 teck
domain/datacenter 中。如果主机名中包含 .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 class 中,其中声明了 TECK。
如果您只需要检查一个字符串是否包含另一个字符串,请使用 String 的 contains() 方法。例如:
if(hostName.toLowerCase().contains("." + TECK.name().toLowerCase() + "."))
如果需要检查字符串是否在主机名中的特定位置(例如第一个句点之前、第二个句点之前等),请使用 String 的 split 方法。例如:
if(hostName.toLowerCase().split("\.")[1].equals(TECK.name().toLowerCase()))
split() returns 一个字符串数组,其中包含调用它的字符串中的子字符串,这些子字符串被特定的正则表达式模式分隔,在本例中为句号。
例如,当对字符串 p-desktop-1234565.teck.host.com
调用 split("\.")
时,它将 return 以下数组:
{"p-desktop-1234565", "teck", "host", "com"}
。然后我们检查(使用 [1]
)数组中的第二项是否等于 "teck".
虽然 contains 方法通常可以安全使用,但出于此类目的,我建议结合使用 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
(假设这是不允许的)
我有一个像这样的主机名 p-desktop-1234565.teck.host.com
,我需要检查它是否在 teck
domain/datacenter 中。如果主机名中包含 .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 class 中,其中声明了 TECK。
如果您只需要检查一个字符串是否包含另一个字符串,请使用 String 的 contains() 方法。例如:
if(hostName.toLowerCase().contains("." + TECK.name().toLowerCase() + "."))
如果需要检查字符串是否在主机名中的特定位置(例如第一个句点之前、第二个句点之前等),请使用 String 的 split 方法。例如:
if(hostName.toLowerCase().split("\.")[1].equals(TECK.name().toLowerCase()))
split() returns 一个字符串数组,其中包含调用它的字符串中的子字符串,这些子字符串被特定的正则表达式模式分隔,在本例中为句号。
例如,当对字符串 p-desktop-1234565.teck.host.com
调用 split("\.")
时,它将 return 以下数组:
{"p-desktop-1234565", "teck", "host", "com"}
。然后我们检查(使用 [1]
)数组中的第二项是否等于 "teck".
虽然 contains 方法通常可以安全使用,但出于此类目的,我建议结合使用 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
(假设这是不允许的)