3

私はこの行を持っています:

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

HOSTこの場合は名前を取得する必要があります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;
4

7 に答える 7

4

apache.commons StringUtils.containsIgnoreCase(Str)を使用できます

 StringUtils.contains("abc", "A"); //returns true 
于 2013-01-15T12:45:13.540 に答える
3

どうですか:

String host = line.toUpperCase().split("HOST = ")[1].split(")")[0];
于 2013-01-15T12:44:55.527 に答える
3

試す

    String s= "(ADDRESS = (PROTOCOL = XXX)(HOST = YYY)(PORT = ZZZ)) }";
    String host = s.replaceAll("^.+\\((HOST|host) *= *(.+?)\\).+$", "$2");      
于 2013-01-15T12:57:09.467 に答える
1

StringUtilsのsubstringbetween()を使用しないのはなぜですか

substringBetween(str,"(HOST=",")");
于 2013-01-15T13:00:35.430 に答える
1

このコードはあなたにホスト名を与えます、どんな場合でもあなたの文字列です(上、下、または混合)

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

strは文字列全体になります...そして文字列全体を大文字または小文字に変換する必要はありません...:)

于 2013-01-15T13:23:07.337 に答える
0

文字列の形式がそのままである限り、解決策ははるかに簡単です。

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

また、この場合、文字列の大文字小文字は関係ありません。

于 2013-01-15T14:25:50.927 に答える
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));
}
于 2013-01-15T14:09:54.007 に答える