子串基于特殊字符

时间:2017-08-31 06:13:00

标签: java string substring

我必须从sql中获取tablename和columnnames。为此,我根据空间拆分了子句数据并将所有元素存储在列表中,但现在有些列具有方法调用或其他一些验证。

对于某些专栏:

  • max(TableName1.ColumnName1) - > TableName1.ColumnName1
  • concat('Q',TableName2.ColumnName2)} - > TableName2.ColumnName2
  • left(convert(varchar(90),TableName3.ColumnName3),1)}) - > TableName3.ColumnName3

现在我验证了的字符串 在这里我只提示即()基于此我必须在特殊字符之前/之前得到正确和左边的字符串。

可能会获得, ( )

等特殊字符

2 个答案:

答案 0 :(得分:2)

import java.util.*;
import java.text.*;
import java.util.regex.*;

public class Parser {

    private static Pattern p = Pattern.compile("(?![\\(\\,])([^\\(\\)\\,]*\\.[^\\(\\)\\,]+)(?=[\\)\\,])");

    private static String getColumnName(String s) {
        Matcher m = p.matcher(s);
        while(m.find()) {
            return m.group(1);
        }
        return "";
    }

     public static void main(String []args) {
        String s1= "max(TableName1.ColumnName1)";
        System.out.println(getColumnName(s1));

        String s2= "concat('Q',TableName2.ColumnName2)}";
        System.out.println(getColumnName(s2));

        String s3= "left(convert(varchar(90),TableName3.ColumnName3),1)})";
        System.out.println(getColumnName(s3));
     }
}

输出:

TableName1.ColumnName1                                                                                                                                                                                                                
TableName2.ColumnName2                                                                                                                                                                                                                
TableName3.ColumnName3  

答案 1 :(得分:0)

您可以使用 [(),{}] 之类的正则表达式将数组拆分为标记,然后只需使用"选择标记。&#34 ; 登录。例如:

public static String getColumnName (String input) {
    if (StringUtils.isEmpty(input)) return input;
    String[] tokens = input.split("[(),{}]");
    for (String token: tokens) {
      if (token.contains(".")) return token;
    }
    return input;
}
public static void main(String args[]) throws Exception {
    //The two tokens will be "max", "TableName1.ColumnName1".
    String test1 = "max(TableName1.ColumnName1)";

    //The three tokens will be "concat", "Q" and "TableName2.ColumnName2".
    String test2 = "concat('Q',TableName2.ColumnName2)}";

    //The six tokens will be "left", "convert", "varchar", 
    //"90", "", "1" and "TableName3.ColumnName3".
    String test3 = "left(convert(varchar(90),TableName3.ColumnName3),1)})";

    System.out.println(getColumnName(test1));
    System.out.println(getColumnName(test2));
    System.out.println(getColumnName(test3));
}

打印出来会给你:

TableName1.ColumnName1
TableName2.ColumnName2
TableName3.ColumnName3