从字符串中检索单词

时间:2013-01-15 12:40:01

标签: java string

我有这一行:

(ADDRESS = (PROTOCOL = XXX)(HOST = YYY)(PORT = ZZZ))

我需要检索HOST名称,在这种情况下YYY

我不知道它是用小写大写写的,还是用它们之间的混合。 所以我将整行切换为大写line.toUpperCase(),然后根据HOST =拆分行,然后选择字符,直到我得到),表示主机名的结束。< / p>

我确信有更好的方法可以做到这一点。任何提示将不胜感激。

我的代码:

String host = "";
line = line.toUpperCase();
int i = line.indexOf("HOST");
while(line.charAt(i)!='=')
    i++;
while(line.charAt(i)!=')') {
    i++;
    if(line.charAt(i)!=')'&&line.charAt(i)!=' ')
       host = host + line.charAt(i);
}
return host;

7 个答案:

答案 0 :(得分:4)

您可以使用apache.commons StringUtils.containsIgnoreCase(Str)

 StringUtils.contains("abc", "A"); //returns true 

答案 1 :(得分:3)

怎么样:

String host = line.toUpperCase().split("HOST = ")[1].split(")")[0];

答案 2 :(得分:3)

尝试

    String s= "(ADDRESS = (PROTOCOL = XXX)(HOST = YYY)(PORT = ZZZ)) }";
    String host = s.replaceAll("^.+\\((HOST|host) *= *(.+?)\\).+$", "$2");      

答案 3 :(得分:1)

为什么不使用substringbetween() StringUtils

substringBetween(str,"(HOST=",")");

答案 4 :(得分:1)

此代码将为您提供主机名,无论如何都是您的字符串(上限,下限或混合)

String[] st= str.split("=");
        String[] st2= st[3].split("\\)\\(");
        System.out.println("Host name::"+st2[0]);

str将是整个字符串...而且你不需要将整个字符串转换为大写或小写......:)

答案 5 :(得分:0)

你只需要主持人。好。 但是在正则表达式中迈出一步可以使用它:

Pattern p = Pattern.compile("\\s*\\(ADDRESS\\s*=\\s*\\(\\s*PROTOCOL\\s*=\\s*(\\w+)\\s*\\)\\s*\\(\\s*HOST\\s*=\\s*(\\w+)\\s*\\)\\s*\\(\\s*PORT\\s*=\\s*(\\d+)\\s*\\)\\s*\\)\\s*");
Matcher m = p.matcher("(ADDRESS = (PROTOCOL = http)(HOST = localhost)(PORT = 8080))");
if(m.matches()){
    System.out.println("protocol = "+m.group(1));
    System.out.println("host = "+m.group(2));
    System.out.println("port = "+m.group(3));
}

答案 6 :(得分:0)

只要你的字符串格式保持原样,解决方案就很简单了:

line.split("\\)\\(")[1].split("=")[1].trim();

此外,在这种情况下,字符串的大小写无关紧要!