Quick actions

cmd+k|ctrl+k

Navigation

Languages

expressiont_to_array_iwanna

Snippet info

Language

Java

Visibility

public

Author

pheker

Created

2017-07-04T06:34:18Z

Updated

2017-07-04T06:34:18Z

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/** 
 * @author		PheonixHkbxoic
 * @email		[email protected] 
 * @version 	2017-3-20 下午02:41:18
 * @description 	Here is decription
 *
 */

class Main {

	    
	    
	public static void main(String[] args) {

		final  String sourceStr = "x<=3.54,2.1<=x,x<3.5,-4<x,x>Sqrt[Max[5,3]],Max[Log[2,Min[3,5]],Sqrt[Max[5,3]]]<=x,x>-6.3,x>=5.3,6.8>=x,3.2>x,x<Sqrt[3],x<2^(1/3),x<Max[2,4],x<Log[2,3],x<Min[2,Max[3.3,2]],x<Log[3,Min[2,Max[3.3,2]]]";
		
		List<String> parseList = parseExp(sourceStr);
		print(parseList);
		
		System.out.println("--------");
		
		List<String> matchList = getMatch(parseList, "x>=(.+)|(.+)<=x");
		print(matchList);
	}
	
	/**
	 * 解析式子
	 * @param  string sourceStr 源字符串
	 * @return array
	 */
	private static List<String> parseExp(String sourceStr){
		int len = sourceStr.length();
		List<String> parseList = new ArrayList<String>();
		int pair = 0;
		String exp = "";
		String currChar = "";
		for (int i = 0; i < len; i++) {
			currChar = sourceStr.substring(i, i+1);
			exp += currChar;
			if("[".equals(currChar)){
				pair++;
			}else if("]".equals(currChar)){
				pair--;
			}else if(",".equals(currChar)&&pair==0){
				parseList.add(exp.substring(0,exp.length()-1));
				exp = "";
			}
		}
		
		return parseList;
	}
	
	/**
	 * 获取式子匹配正则结果
	 * @param  array $list 式子数组
	 * @param  string pattern 正则
	 * @return array
	 */
	private static List<String>  getMatch(List<String> list, String pattern) {
	    List<String> matchList = new ArrayList<String>();
	    int size = list.size();
	    for(int i=0;i< size;i++) {
	    	Matcher matcher = Pattern.compile(pattern).matcher(list.get(i));
	    	
	        if(matcher.find()) { //如果正则匹配成功,记录到命中数组
	        	String group1 = matcher.group(1);
	        	if(group1==null||"".equals(group1)){
	        		matchList.add(matcher.group(2));
	        	}else{
	        		matchList.add(group1);
	        	}
	        }
	    }
	    return matchList;
	}
	
	/**
	 * 打印数组--用于测试
	 * @param list
	 */
	private static void print(List<String> list){
		int size = list.size();
		for (int i = 0; i <size; i++) {
			System.out.println(list.get(i));
		}
	}
	    
}
INFO