0

我在 Java 中有一个字符串,它以这种格式保存数据:

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

如何将该字符串的值设置为括号中的字符,而不包括括号?(请注意,每个实例的字符大小都会有所不同)。

4

3 回答 3

6

单线解决方案是使用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:刚刚重读并意识到关闭括号是最后一个字符。所以没有必要获取第二个索引。

于 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 回答