Java 如何从带括号的字符串中提取字符串?

Java 如何从带括号的字符串中提取字符串?,java,regex,string,split,Java,Regex,String,Split,我有一根这样的绳子- (a,b=7) 如何从上面的字符串中提取a、b和7。我需要将这些值传递给我的构造函数 Graph.Edge("a", "b", 7) 有什么简单的方法可以做到这一点吗?我需要使用正则表达式吗?使用正则表达式可以执行以下操作: String str = "(a,b=7)"; Pattern p = Pattern.compile("\\((.*?),(.*?)=(\\d+)\\)"); Matcher m = p.matcher(str); if (m.matches(

我有一根这样的绳子-

(a,b=7)
如何从上面的字符串中提取a、b和7。我需要将这些值传递给我的构造函数

Graph.Edge("a", "b", 7)

有什么简单的方法可以做到这一点吗?我需要使用正则表达式吗?

使用正则表达式可以执行以下操作:

String str = "(a,b=7)";

Pattern p = Pattern.compile("\\((.*?),(.*?)=(\\d+)\\)");
Matcher m = p.matcher(str);
if (m.matches()) {
    System.out.println(m.group(1));                    // a
    System.out.println(m.group(2));                    // b
    System.out.println(Integer.parseInt(m.group(3)));  // 7
}

您可以使用
string.split
方法

String s = "(a,b=7)";
String parts[] = s.split("\\W+");
ArrayList<String> list = new ArrayList<String>(Arrays.asList(parts));
list.removeAll(Arrays.asList("", null));
System.out.println(list);

大多数解决方案都会使用类似正则表达式的
Scanner
,或
split
。您也可以使用
StringTokenizer
。不管怎样,您的输入总是用括号括起来,还是可以是格式
foo(a,b=c)bar(d)
?如果第二种形式也是可能的,那么您希望得到什么样的结果?它将始终采用我上面提到的格式
(a,b=7)
。意思是
(字符串,字符串=整数)
。但是如果不是这种格式,那么我想打印错误消息并终止程序。谢谢。它很好用。但是有没有办法寻找错误案例呢。这意味着我的字符串在大多数情况下都是这种格式的
(string,string=integer)
,但如果不是这种格式,那么我想打印错误消息(说string不是所需的格式)并从程序终止。因此,在if语句中添加一个
else
子句?aaah。。很简单。现在明白了。
[a, b, 7]