数据存储中Ids拼接技术介绍,以及拼接工具类

Ids

主要替代中间表,减少数据库的sql语句交互时间,

读取时读取的ids 为id拼接的字符串,用此方法可以结合 in 等多种语句,无需多表读取即可完成业务

配合此工具类,可大大提高应用程序的效率



import java.util.*;
import java.util.regex.Pattern;

/**
 * 数据存储中Ids拼接技术,拼接工具类<br/>
 *
 * 加入 <br/>
 * 是否存在 <br/>
 * 删除 <br/>
 * 排序 <br/>
 * 数量 <br/>
 *
 * 检查(格式) <br/>
 * 格式化 <br/>
 * 去重 <br/>
 * @author UMK.Winnid
 * Created by Winnid on 13-8-30.
 */
public class IdsUtil {


    /***
     * 存在 返回 True/False
     */
    public static boolean exsit(String ids, String id) {
        //空排除
        if(!idNullCheck(id)) throw new NullPointerException("Parameter id is Null");
        ids = idsNullCheck(ids);

        //格式化
        ids = format(ids);
        //去重
        ids = deleteRepeat(ids);

        //解析字符串
        StringTokenizer tokenizer = new StringTokenizer(ids, ";");
        while (tokenizer.hasMoreTokens()) {
            try {
                String s = tokenizer.nextToken();
                if(id.equals(s)) return true;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    /***
     * 加入 返回 "Fault"/ids
     */
    public static String add(String ids, String id) {
        //是否存在
        if(exsit(ids, id)) {
            return "Fault";
        }

        //加入
        ids += id + ";";
        //排序
        ids = sort(ids);

        return ids;
    }

    /***
     * 数量 返回 int
     */
    public static int length(String ids) {
        //空检查
        ids = idsNullCheck(ids);
        //格式化
        ids = format(ids);
        //去重
        ids = deleteRepeat(ids);

        //数量计算
        StringTokenizer tokenizer = new StringTokenizer(ids, ";");
        return  tokenizer.countTokens();
    }
    /***
     * 删除 返回 "Fault"/ids
     */
    public static String remove(String ids, String id) {
        //是否存在
        if(exsit(ids, id)) {
            return "Fault";
        }
        //删除
        ids.replace(";"+id+";", ";");
        return ids;
    }
    /***
     * 排序 返回 String
     */
    public static String sort(String ids) {
        //空检查
        ids = idsNullCheck(ids);
        //拆解
        List<String> idsList = new ArrayList<String>();
        StringTokenizer tokenizer = new StringTokenizer(ids, ";");
        while (tokenizer.hasMoreTokens()) {
            try {
                String s = tokenizer.nextToken();
                idsList.add(s);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        String[] idsArray = (String[]) idsList.toArray();
        Arrays.sort(idsArray);

        String newIds = new String(";");
        for(String id : idsArray) {
            newIds += id + ";";
        }
        return newIds;
    }
    /***
     * 检查(格式)
     */
    public static boolean check(String ids) {
        Pattern pattern = Pattern.compile("[0-9]*");
        StringTokenizer st = new StringTokenizer(ids, ";");
        while( st.hasMoreElements() ){
            String s = st.nextToken();
            //是数字
            if (!pattern.matcher(s).matches()) {
                return false;
            }
        }
        return true;
    }
    /***
     * 格式化
     */
    public static String format(String ids) {
        //空检查
        ids = idsNullCheck(ids);

        //格式化
        Pattern pattern = Pattern.compile("[0-9]*");
        StringTokenizer st = new StringTokenizer(ids, ";");
        //三种情况
        //1.没有元素
        if(st.countTokens() == 0) {
            ids = new String(";");
        }
        //2.前面元素没有;
        if(st.countTokens() != 0 && !ids.startsWith(";")) {
            ids = ";" + ids;
        }
        //3.最后元素没有;
        if(st.countTokens() != 0 && !ids.endsWith(";")) {
            ids = ids + ";";
        }
        while( st.hasMoreElements() ){
            String s = st.nextToken();
            //是数字
            if (!pattern.matcher(s).matches()) {
                return "ids中包含非数字的id";
            }
        }
        return ids;
    }

    /***
     * 去重
     */
    public static String deleteRepeat(String ids) {
        //空检查
        ids = idsNullCheck(ids);

        //去重
        StringTokenizer st = new StringTokenizer(ids, ";");
        Set<String> set = new HashSet<String>();
        while( st.hasMoreElements() ){
            String s = st.nextToken();
            set.add(s);
        }
        String newIds = ";";
        for(String i : set) {
            newIds += i + ";";
        }
        return newIds;
    }

    //id空检查
    public static boolean idNullCheck(String id) {
        if(id == null || id.trim().equals("")) {
            return false;
        } else {
            return true;
        }
    }

    //ids空检查
    public static String idsNullCheck(String ids) {
        if(ids == null || ids.trim().equals("")) {
            return new String();
        } else {
            return ids;
        }
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值