我在Java中有一个String,它以这种格式保存数据:
String x = "xxxxxx xxxxxx xxxxxx (xxx)";
如何将该字符串的值设置为括号中的字符,而不包括括号? (请注意,每种情况下字符大小都会有所不同。)
答案 0 :(得分: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
答案 1 :(得分: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:重新阅读并意识到关闭的paren是最后一个角色。所以没有必要得到第二个索引。
答案 2 :(得分: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);