Java 从字符串中检索单词
我有一句话:Java 从字符串中检索单词,java,string,Java,String,我有一句话: (ADDRESS = (PROTOCOL = XXX)(HOST = YYY)(PORT = ZZZ)) 我需要检索主机名称,在本例中为YYY 我不知道它是用小写字母还是大写字母写的,甚至是它们的混合体。 因此,我通过line.toUpperCase()将整行切换为大写,然后根据HOST=分割行,并选择字符,直到得到),这表示主机名的结尾 我相信有更好的办法。如有任何提示,将不胜感激 我的代码: String host = ""; line = line.toUpperCase(
(ADDRESS = (PROTOCOL = XXX)(HOST = YYY)(PORT = ZZZ))
我需要检索主机
名称,在本例中为YYY
我不知道它是用小写字母还是大写字母写的,甚至是它们的混合体。
因此,我通过line.toUpperCase()
将整行切换为大写,然后根据HOST=
分割行,并选择字符,直到得到)
,这表示主机名的结尾
我相信有更好的办法。如有任何提示,将不胜感激
我的代码:
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;
那么:
String host = line.toUpperCase().split("HOST = ")[1].split(")")[0];
您可以使用apache.commons 试一试 你为什么不使用StringUtils呢
substringBetween(str,"(HOST=",")");
此代码将为您提供主机名,在任何情况下都是字符串(大写、小写或混合)
str将是整个字符串。。。您无需将整个字符串转换为大写或小写…:) 您只需要主机。好啊 但是在regex中有一个步骤,您可以使用:
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));
}
只要字符串的格式保持不变,解决方案就简单得多:
line.split("\\)\\(")[1].split("=")[1].trim();
此外,在这种情况下,字符串的大小写并不重要 如果要匹配
)
,为什么要做所有小写和大写的事情?我不匹配)
。我需要在主机
单词旁边找到该单词,该单词不能保证为小写/大写。但我知道这个词的结尾是“')。你的方法似乎很合理。很好。我想我可以通过line.toUpperCase().contains(stringToCheck.toUpperCase())
来实现这一点。。您将如何准确地“检索本例中为YYY的主机名”?我太迷路了…@ManuelMiranda仍然没有。。这样,我只得到包含HOST
单词的那一行。。(我已经做了,但问题中没有提到)非常优雅。我还没有想到正则表达式的解决方案。谢谢,即使=
已连接到主机
,是否也有办法实现此功能?(HOST=YYY
)如果HOST
是用小写(HOST
)写的,这将不起作用。有人能对我的解决方案发表意见吗?你的建议会有帮助。问题是道具的顺序可能不同,例如(主机=YYY)(协议=XXX)(端口=ZZZ):(道具的顺序)不是问题中的标准您是对的,它不存在,从这个意义上说,您的解决方案运行良好。但其他解决方案允许参数重新排序,这无论如何都是好的。我认为此解决方案在给定场景下也是独立于大小写的。实际上,我看到它是关于Oracle Addrees配置字符串的,它在ny订单,所以我甚至不认为重新订购是否符合要求
String[] st= str.split("=");
String[] st2= st[3].split("\\)\\(");
System.out.println("Host name::"+st2[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));
}
line.split("\\)\\(")[1].split("=")[1].trim();