我有这一行:
(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;
答案 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();
此外,在这种情况下,字符串的大小写无关紧要!