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;
}
}