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

标签 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 在这里使用是否正确?或者有没有更好或更有效的方法来做同样的事情?

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

最佳答案

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

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

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

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

split() 返回一个字符串数组,其中包含调用它的字符串中的子字符串,这些子字符串被特定的正则表达式模式分隔,在本例中为句号。

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

关于java - 检查主机名中是否存在特定字符串的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28953357/

相关文章:

java - 单击“注销”按钮并重定向到带有消息的登录页面时禁用 session

java - Selenium 操作方法 : Get url from an <a> tag that has no href attribute

java - java中如何连接字符串

C# 按对象搜索组合框的索引

javascript - 如何使用 javascript 在 getSelection() 中查找所选文本的索引?

java - java拦截器内部重定向

java - 将 SVN 与 CruiseControl 一起使用?

java - 如果找不到元素,如何在 java 流中返回默认 boolean 值?

string - 通过 Powershell 进行日志解析 - 打印第 n 个元素之后的所有数组元素

javascript - 如何测试数组项的文本是否包含子字符串?