0

この形式でデータを保持する Java の文字列があります。

String x = "xxxxxx xxxxxx xxxxxx (xxx)";

括弧を含めずに、その文字列の値を括弧内の文字だけに設定するにはどうすればよいですか? (文字サイズはインスタンスごとに異なることに注意してください)。

4

3 に答える 3

6

1行の解決策はString.replaceAll()、入力全体をキャプチャする(実質的に入力全体を置き換える)だけでなく、グループ1として必要な部分を(貪欲に)キャプチャし、そのグループだけを戻す適切な正規表現を使用することです:

String part = x.replaceAll(".*\\((.*?)\\).*", "$1"); 

参考までに、正規表現文字列の二重のバックスラッシュは、正規表現の単一のスラッシュであり、正規表現のリテラル括弧をエスケープします

ここにいくつかのテストコードがあります:

public static void main(String[] args) {
    String x = "xxxxxx xxxxxx xxxxxx (xxx)";
    String part = x.replaceAll(".*\\((.*)\\).*", "$1");
    System.out.println(part);
}

出力:

xxx    
于 2012-10-08T09:38:18.603 に答える
3

正規表現はそれを行いますが、私の正規表現は弱いです。非正規表現の方法は次のとおりです。

int firstIndex = x.indexOf("(");
x = x.substring(firstIndex+1, x.length()-1);

編集: コメントで指摘されているように、最後以外にデータに他の括弧がある場合、これは機能しません。代わりに次を使用する必要があります。

int firstIndex = x.lastIndexOf("(", x.length()-6);
x = x.substring(firstIndex+1, x.length()-1);

EDIT2: 読み直して、閉じ括弧が最後の文字であることに気付きました。したがって、2 番目のインデックスを取得する必要はありません。

于 2012-10-08T09:42:05.323 に答える
1

String.splitこの種の抽出にはメソッドを使用できます。

String x = "xxxxxx xxxxxx xxxxxx (xxx)";    
String[] arr = x.split("\\(");

x = arr[1].substring(0, arr[1].indexOf(")")); // To remove the trailing bracket.

System.out.println(x);
于 2012-10-08T09:46:46.007 に答える