string 字符串转换数组 mybatis 使用数组批量查询 逗号分割字符串为数组 只允许空格逗号数字 可以是数字字母逗号 如何批量查询

String字符串转换数组


直接上一个完整的字符串切割业务代码吧

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class Test04 {

	public static void main(String[] args) {
		
		// 请求的参数
		String str = "    ,,, , , ,  , , ,   , , , 99  99,999,999,,,,,,,8888888,,,,,   ,,,,,  ,";
		
		// 要求数组纯 int 类型
		boolean b = new Test04().reqParamIsNumber("");
		if(!b) {
			// 需要怎么处理看你的业务需求
			System.out.println("您输入的不是数字类型,请检查输入参数");
		}
		
		// 转换的三个方法,具体功能看文档注释即可
//		List  collect= new Test04().parseReqParamToArrayUseOriginal(str);
		List  collect= new Test04().parseReqParamToArrayUseTrim(str);
//		List  collect= new Test04().parseReqParamToArrayUseTrimAll(str);
		
		// 字符串不为空->查询
		if(!collect.isEmpty()) {
			System.out.println(collect);
		}else {
			System.out.println("is null");
		}
		
	}

	
	/**
	 * 请求参数是Number类型
	 * @param str
	 * @return
	 */
	private boolean reqParamIsNumber(String str){
		if(str.length()==0) 
			return true;
		
		// 数字 空格 逗号
		String regex = "(\\d|,|,|\\s)+";
		boolean b = Pattern.matches(regex, str);
		return b;
	}
	
	
	/**
	 * 将请求参数解析为数组
	 * 方案一:不处理用户输入的各种空格,只做原始分割。
	 * 	转换前:" C888 ,AAAAA , , AGA A , , , , , , A-GA-EGA GA G ,,"
	 * 	转换后:[ C888 , AAAAA ,  ,  AGA A ,  A-GA-EGA GA G ]
	 * @param str
	 * @return
	 */
	private List parseReqParamToArrayUseOriginal(String str) {
		List collect = new ArrayList<>();
		if(str == null || str.length() == 0 || ("").equals(str.trim())) {
			return collect;
		}
		String regex = ",|,";
		String[] strAry = str.split(regex);
		collect = Arrays.asList(strAry).stream().filter(param -> !("").equals(param)).distinct()
				.collect(Collectors.toList());
		return collect;
	}
	
	/**
	 * 方案:只处理每个分割字符的两边空格, 中间空格不管。 考虑操作员在输入时候,在两端多了空格的问题 
	 * 	转换前:" 11 1 , 2 22   ,333 444 555 ,111,222,111,222"; 
	 * 	转换后:[11 1, 22 2, 333 444 555, 111]
	 * @return
	 */
	private List parseReqParamToArrayUseTrim(String str) {
		List collect = new ArrayList<>();
		if(str == null || str.length() == 0 || ("").equals(str.trim())) {
			return collect;
		}
		StringBuilder strbd = new StringBuilder();
		String regex = ",|,";
		String[] strAry = str.split(regex);
		// 过滤掉每个字符串两边的空格,例如: "111,   2 22 ,    3333    " -> "111,2 22,333"。不过滤中间的空格
		Arrays.asList(strAry).stream().forEach(item -> strbd.append(item.trim() + ","));
		// 重新处理为List
		collect = Arrays.asList(strbd.toString().split(",")).stream().filter(param -> !("").equals(param)).distinct()
				.collect(Collectors.toList());
		return collect;
	}

	
	/**
	 * 方案:一律过滤掉所有的空格,每个字符串元素前后、中间的空格,此种方式可能影响到操作员输入的字符本身需要带空格,而你却去除了,影响最终的查询结果。
	 * 	转换前:" C888 ,AAA , , AGA A , , , , , , A-GA-EGA GA G ,"
	 * 	转换后:[C888, AAA, AGAA, A-GA-EGAGAG]
	 * @param str
	 * @return
	 */
	private List parseReqParamToArrayUseTrimAll(String str) {
		List collect = new ArrayList<>();
		if(str == null || str.length() == 0 || ("").equals(str.trim())) {
			return collect;
		}
		String regex = ",|,";
		String[] strAry = str.replaceAll("(?:\\[|null|\\]| +)", "").split(regex);
		collect = Arrays.asList(strAry).stream().filter(param -> !("").equals(param)).distinct()
				.collect(Collectors.toList());
		return collect;
	}
	
	
	
}

你可能感兴趣的:(J2EE技术,JAVA基础,IT_技术,日常开发问题记录,java,web技术)