1.JSON数组格式判断
importcom.google.gson.JsonParser;importcom.google.gson.JsonSyntaxException;publicclassArrayStringChecker{// 方法1:使用Gson库判断是否是JSON数组publicstaticbooleanisJsonArrayString(Stringstr){if(str==null||str.trim().isEmpty()){returnfalse;}Stringtrimmed=str.trim();// JSON数组必须以 '[' 开头,以 ']' 结尾if(!trimmed.startsWith("[")||!trimmed.endsWith("]")){returnfalse;}try{// 使用Gson尝试解析JsonParser.parseString(trimmed).getAsJsonArray();returntrue;}catch(JsonSyntaxException|IllegalStateExceptione){returnfalse;}}// 方法2:简单正则表达式判断publicstaticbooleanisSimpleJsonArray(Stringstr){if(str==null||str.trim().isEmpty()){returnfalse;}Stringtrimmed=str.trim();returntrimmed.startsWith("[")&&trimmed.endsWith("]");}// 方法3:判断是否有数组格式的内容publicstaticbooleanisArrayString(Stringstr){if(str==null||str.trim().isEmpty()){returnfalse;}Stringtrimmed=str.trim();// 检查是否是JSON数组格式if(trimmed.startsWith("[")&&trimmed.endsWith("]")){// 获取数组内容部分(去掉两端的括号)Stringcontent=trimmed.substring(1,trimmed.length()-1).trim();// 空数组 []if(content.isEmpty()){returntrue;}// 检查内容格式(简单判断)// 数组元素之间用逗号分隔,元素可以是数字、字符串等String[]elements=content.split(",");for(Stringelement:elements){Stringelem=element.trim();// 这里可以添加更复杂的元素格式验证if(elem.isEmpty()){returnfalse;// 不允许空元素(除非是最后一个?)}}returntrue;}returnfalse;}publicstaticvoidmain(String[]args){// 测试用例String[]testCases={"[1,2,3,4,5]",// true"[\"a\",\"b\",\"c\"]",// true"[]",// true"[1, 2, 3]",// true"[1,2,3,]",// false(尾随逗号在JSON中无效)"1,2,3,4,5",// false"{'a':1,'b':2}",// false"[1,2,three]",// true(但某些验证可能要求引号)null,// false"",// false" [1,2,3] "// true};for(Stringtest:testCases){System.out.println("输入: \""+test+"\"");System.out.println("isJsonArrayString: "+isJsonArrayString(test));System.out.println("isSimpleJsonArray: "+isSimpleJsonArray(test));System.out.println("isArrayString: "+isArrayString(test));System.out.println("---");}}}
2.使用Jackson库判断
importcom.fasterxml.jackson.databind.ObjectMapper;importcom.fasterxml.jackson.core.JsonProcessingException;publicclassJacksonArrayChecker{privatestaticfinalObjectMappermapper=newObjectMapper();publicstaticbooleanisJsonArrayWithJackson(Stringstr){if(str==null||str.trim().isEmpty()){returnfalse;}Stringtrimmed=str.trim();if(!trimmed.startsWith("[")||!trimmed.endsWith("]")){returnfalse;}try{// 尝试解析为JSON数组mapper.readTree(trimmed).isArray();returntrue;}catch(JsonProcessingExceptione){returnfalse;}}}
3.自定义分隔符的数组字符串判断
publicclassCustomArrayChecker{// 判断是否是逗号分隔的数组字符串publicstaticbooleanisCommaSeparatedArray(Stringstr){if(str==null||str.trim().isEmpty()){returnfalse;}Stringtrimmed=str.trim();// 如果以方括号开头结尾,先去掉它们if(trimmed.startsWith("[")&&trimmed.endsWith("]")){trimmed=trimmed.substring(1,trimmed.length()-1).trim();}// 检查是否包含逗号分隔的元素String[]elements=trimmed.split(",");if(elements.length==0){returnfalse;}// 验证每个元素都不为空(允许空格)for(Stringelement:elements){if(element.trim().isEmpty()){returnfalse;}}returnelements.length>0;}// 通用分隔符判断publicstaticbooleanisDelimitedArray(Stringstr,Stringdelimiter){if(str==null||str.trim().isEmpty()||delimiter==null){returnfalse;}Stringtrimmed=str.trim();// 如果以特定括号包裹if(trimmed.startsWith("[")&&trimmed.endsWith("]")){trimmed=trimmed.substring(1,trimmed.length()-1).trim();}String[]elements=trimmed.split(delimiter);// 验证分隔符确实存在if(elements.length<=1&&!trimmed.contains(delimiter)){returnfalse;}// 验证每个元素for(Stringelement:elements){if(element.trim().isEmpty()){returnfalse;}}returnelements.length>0;}}
4.完整的验证工具类
importjava.util.regex.Pattern;publicclassArrayStringValidator{// 正则表达式验证简单的数组格式privatestaticfinalPatternJSON_ARRAY_PATTERN=Pattern.compile("^\\s*\\[.*\\]\\s*$");privatestaticfinalPatternNUMBER_ARRAY_PATTERN=Pattern.compile("^\\s*\\[\\s*\\d+(\\s*,\\s*\\d+)*\\s*\\]\\s*$");privatestaticfinalPatternSTRING_ARRAY_PATTERN=Pattern.compile("^\\s*\\[\\s*\"[^\"]*\"(\\s*,\\s*\"[^\"]*\")*\\s*\\]\\s*$");/** * 判断是否是数组格式的字符串 */publicstaticbooleanisArrayFormat(Stringstr){returnstr!=null&&JSON_ARRAY_PATTERN.matcher(str).matches();}/** * 判断是否是数字数组字符串 */publicstaticbooleanisNumberArrayString(Stringstr){returnstr!=null&&NUMBER_ARRAY_PATTERN.matcher(str).matches();}/** * 判断是否是字符串数组字符串 */publicstaticbooleanisStringArrayString(Stringstr){returnstr!=null&&STRING_ARRAY_PATTERN.matcher(str).matches();}/** * 安全地将数组字符串转换为字符串数组 */publicstaticString[]parseToStringArray(StringarrayStr){if(!isArrayFormat(arrayStr)){thrownewIllegalArgumentException("不是有效的数组格式字符串");}Stringcontent=arrayStr.trim().substring(1,arrayStr.length()-1)// 去掉方括号.trim();if(content.isEmpty()){returnnewString[0];}// 处理引号和逗号returncontent.split("\\s*,\\s*");}}
5.使用示例
publicclassMain{publicstaticvoidmain(String[]args){// 使用示例Stringtest1="[1,2,3]";Stringtest2="[\"apple\",\"banana\"]";Stringtest3="1,2,3";Stringtest4="[]";Stringtest5="[1, 2, 3, ]";// 注意尾随逗号System.out.println("test1 是JSON数组: "+ArrayStringChecker.isJsonArrayString(test1));System.out.println("test2 是JSON数组: "+ArrayStringChecker.isJsonArrayString(test2));System.out.println("test3 是JSON数组: "+ArrayStringChecker.isJsonArrayString(test3));System.out.println("test4 是JSON数组: "+ArrayStringChecker.isJsonArrayString(test4));System.out.println("test5 是JSON数组: "+ArrayStringChecker.isJsonArrayString(test5));System.out.println("\n使用自定义分隔符检查:");System.out.println("test3 是逗号分隔数组: "+CustomArrayChecker.isCommaSeparatedArray(test3));}}