字符串解析mechansim获得价值
问题描述:
我有以下问题,并希望如果我使用的是最坏的可能机制,实现什么都我试图做有人能告诉我:字符串解析mechansim获得价值
这里是我的字符串,我需要解析:
(s(j1) | f(j2) | d(f3) | t(f4) | e(f5) = 5) & v(g) = "0"
我需要能够获得J1,J2,F3,F4,F5和g,基本上什么都括号内为单独的元件
下面是我在做什么,它不是以我想要的方式工作......
String parsedString="";
String delimiter = "[()s(f(d(t(n(v(&|]+");
String[] tokens = parseString.split(delimiterString);
List<String> listOfValues = new ArrayList<String>(Arrays.asList(tokens));
for (int i=0;i<listOfValues.size();i++)
{
System.out.println("Value of "+i+"is "+listOfValues.get(i));
if(listOfValues.get(i).equals("\r") || listOfValues.get(i).equals("")|| listOfValues.get(i).equals(" "))
{
listOfValues.remove(i);
}
}
我也试图删除空格和回车,但如果有更好的方法来做到这一点(显然我的方式不工作),请让我知道。
答
这应有助于:
String input = "(s(j1) | f(j2) | d(f3) | t(f4) | e(f5) = 5) & v(g) = \"0\"";
String regex = "\\(([^(]+?)\\)";
Matcher matcher = Pattern.compile(regex).matcher(input);
while (matcher.find()) {
System.out.println(matcher.group(1));
}
+0
工作!谢谢! – user811433 2013-02-27 13:49:26
答
你可以试试这个:
Pattern p = Pattern.compile("[a-z]\\(([a-z0-9]+)\\)");
Matcher m = p.matcher(input);
while (m.find()) {
System.out.println(m.group(1));
}
与您的输入使用时,返回此:
j1
j2
f3
f4
f5
g
答
一个正则表达式是一个简单的方法只要没有涉及严重的递归就行。
String s = "(s(j1) | f(j2) | d(f3) | t(f4) | e(f5) = 5) & v(g) = \"0\"";
Pattern p = Pattern.compile("\\A.*?\\(([^\\(\\)][^\\(\\)]?)\\)(.*)\\z", Pattern.DOTALL);
List<String> listOfValues = new ArrayList<String>();
Matcher m = p.matcher(s);
while (m.matches())
{
String toAdd = m.group(1);
System.out.println("adding = " + toAdd);
listOfValues.add(toAdd);
s = m.group(2);
m = p.matcher(s);
}
答
Pattern p = Pattern.compile("(?<=\\()[^()]+(?=\\))");
Matcher m = p.matcher("(s(j1) | f(j2) | d(f3) | t(f4) | e(f5) = 5) & v(g) = \"0\"");
while (m.find()) {
System.out.println(m.group(0));
}
仅供参考,这是一个非常好的网站与正则表达式http://www.regexplanet.com/advanced/java/index.html打试试'\(([^(] +?) \)'作为正则表达式和您的字符串作为输入。 – 2013-02-27 12:46:14