package com.meidusa.amoeba.parser.function;
import java.util.List;
import com.meidusa.amoeba.parser.expression.Expression;
import com.meidusa.amoeba.sqljep.ParseException;
/**
* ���ַ���������
* @author Li Hui
* @author struct
*/
public class Substring extends AbstractFunction {
/**
* �õ�list[0]�����ַ�������ʼλ��Ϊlist[1]��Ӧ���ַ���������Ϊlist[1]
*/
@SuppressWarnings("unchecked")
public Comparable evaluate(List<Expression> list, Object[] parameters)
throws ParseException {
int size = list.size();
if(size<2){
return null;
}
String str = (String)list.get(0).evaluate(parameters);
int start = ((Long)list.get(1).evaluate(parameters)).intValue();
if(size == 2){
return substring(str,start,-1);
}else if(size == 3){
int length = ((Long)list.get(1).evaluate(parameters)).intValue();//�²������1�п���д���ˣ��д���֤
if(length<=0) return "";
return substring(str,start,length);
}else{
return null;
}
}
/**
* @param str
* @param pos �ڼ���λ�ÿ�ʼ(��1��ʼ)������Ǹ�����ʾ�����ڼ�����Ʃ��-3��ʾ�ӵ�����3����ʼ�����㣩
* @param length ���ַ�������
* @return
*/
public static String substring(String str,int pos,int length){
if(pos==0){
return "";
}
int beginIndex = 0;
if(pos<0){
beginIndex = str.length() + pos;
if(beginIndex <0)return "";
}else{
beginIndex = pos -1;
}
if(length <=-1){
return str.substring(beginIndex);
}else{
int endIndex = beginIndex+length>str.length()-1?str.length():beginIndex+length;
return str.substring(beginIndex, endIndex);
}
}
public static void main(String[] args){
System.out.println(substring("Sakila",-3,-1));
}
}