substring.java

来自「mysql集群」· Java 代码 · 共 68 行

JAVA
68
字号
package com.meidusa.amoeba.parser.function;

import java.util.List;

import com.meidusa.amoeba.parser.expression.Expression;
import com.meidusa.amoeba.sqljep.ParseException;

/**
 * 
 * @author struct
 *
 */
public class Substring extends AbstractFunction {

	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();
			if(length<=0) return "";
			return substring(str,start,length);
		}else{
			return null;
		}
		
	}

	/**
	 * pos 
	 * @param str
	 * @param pos 第几个位置开始(从1开始)
	 * @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,-2));
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?