Java处理字符串搜索嵌套结构的方法
- 格式:docx
- 大小:16.78 KB
- 文档页数:3
Java中的正则表达式和字符串处理正文:Java是一种广泛使用的编程语言,它提供了许多强大的字符串处理功能。
在Java中,正则表达式是一种非常有用的工具,可以用来处理和匹配字符串。
正则表达式是一种模式匹配的工具,可以通过定义一种特定的模式来搜寻、匹配和替换字符串。
1. 正则表达式基础正则表达式由字符、元字符和修饰符组成。
字符可以是字母、数字或特殊字符,而元字符则表示特殊含义。
例如,点字符(".")表示任何字符,星号("*")表示匹配零个或多个前面的字符。
修饰符则用于指定匹配的规则,例如忽略大小写(matchCase)、多行匹配(multiline)等。
2. 字符串匹配和查找在Java中,使用Pattern和Matcher类来进行正则表达式的匹配和查找。
Pattern类表示了一个正则表达式的编译表示,而Matcher类则用于对输入字符串进行匹配和查找操作。
例如,可以使用如下代码来检查一个字符串是否符合指定的正则表达式:```javaString input = "Hello World";Pattern pattern = pile("Hello");Matcher matcher = pattern.matcher(input);if (matcher.find()) {System.out.println("字符串匹配成功");} else {System.out.println("字符串匹配失败");}```3. 字符串替换除了匹配和查找,正则表达式还可以用于字符串的替换操作。
在Java中,可以使用Matcher类的`replaceAll()`方法来进行替换。
例如,可以使用如下代码将字符串中的所有空格替换为逗号:```javaString input = "Hello World";Pattern pattern = pile(" ");Matcher matcher = pattern.matcher(input);String result = matcher.replaceAll(",");System.out.println(result);```4. 字符串分割正则表达式还可以用于字符串的分割。
java语言的if嵌套结构1.引言1.1 概述在Java语言中,if语句是一种常见的控制结构,用于根据条件的真假来执行不同的代码块。
if语句的基本用法我们已经很熟悉了,但是在实际的编程过程中,我们经常会遇到需要根据多个条件来判断执行哪段代码的情况。
这时候,就需要用到if嵌套结构。
if嵌套结构是一种在if语句内部再次嵌套if语句的方式,通过这种结构,我们可以实现更复杂的条件判断和代码执行逻辑。
它允许我们按照从上到下的顺序逐层判断条件,从而实现更精细的控制。
如果我们只使用简单的if语句,我们只能根据一个条件来进行判断,而无法满足多个条件同时满足的情况。
而通过if嵌套结构,我们可以根据多个条件的组合来决定执行哪些代码块。
这样,我们可以更加灵活地处理各种不同的情况。
然而,if嵌套结构也存在一些问题。
首先,过多的if嵌套会导致代码的复杂性增加,可读性变差,维护和调试变得困难。
其次,if嵌套结构容易产生逻辑错误,因为每个条件表达式都需要仔细判断和处理。
因此,在使用if嵌套结构时,我们需要注意代码的简洁性和可读性,避免过度使用嵌套结构。
在本文中,我们将详细介绍if嵌套结构的使用方法和注意事项,以及它在Java语言中的优缺点。
通过深入了解和合理使用if嵌套结构,我们可以提高代码的灵活性和可维护性,更好地完成编程任务。
1.2 文章结构本文将从引言、正文和结论的角度进行论述Java语言的if嵌套结构。
以下是文章的结构安排:引言:1.1 概述1.2 文章结构1.3 目的正文:2.1 if语句的基本用法2.2 if嵌套结构的概念和作用结论:3.1 if嵌套结构的优缺点3.2 对于Java语言中if嵌套结构的建议和应用注意事项在引言部分,我们将对Java语言的if嵌套结构进行概述,以便读者对该主题有一个初步的了解。
我们还将介绍本文的目的,即探讨if嵌套结构在Java编程中的应用和注意事项。
在正文部分,我们将首先介绍if语句的基本用法,包括其语法和常见的应用场景。
主要介绍了java里面嵌套类的一些用法:摘要:与字段和方法类似,Java允许类是其它类的成员。
在这里,我们将嵌套类分为4种--嵌套顶级类(nested to p-l eve l cl asse s),成员内部类(instanc e inner cl ass es),本地内部类(local inner c las ses)和匿名内部类(anonymo us inner cl asse s)。
在教授Java时,我经常发现学生尝试在方法中声明其它的方法。
不过,与Pascal语言不同--Pa sca l允许嵌套声明过程proc edu res(与方法类似),而Java是不允许这样做的。
对于以下的代码,尝试在outerM eth od()中声明innerMe tho d()方法,编译时将会通不过。
void outerMethod (){void innerMethod (){}}不过,由Java语言规范1.1开始,Java就支持类嵌套;Java编译器允许一个类出现在另一个类中。
以下的代码段就展示了如何在oute rCl ass类中嵌套inne rC lass类。
class outerClass{class innerClass{}}为什么Java支持类嵌套,还有Java支持哪些类嵌套?以下的部分将会回答这些问题,当你读完这篇文章,你就会学习到类嵌套的相关知识,并且运用它来写出强大的Java程序。
首先我们先来看一下为什么Java支持类嵌套。
注意:在发布JDK1.1后,Sun发布了内部类规范的文档。
该文档谈到嵌套顶级类和内部类的运用。
在读完这篇文章后,我强烈建议你浏览这些文档。
为什么Java支持类嵌套?Java并非一定要支持类嵌套。
实际上,如果你看过内部类规范文档,你将会发现类嵌套的应用在哪里。
不过,Java支持类嵌套至少有两个好处:.令源代码更加清晰.减少命名的冲突通过类嵌套可以令源代码变得更为清楚,因为你声明了一个包含有一些对象的类,它必须可以管理和允许类中的方法来直接访问对象的字段,以及调用对象的方法--即使是外部类中的私有字段和方法。
JAVA代码实现嵌套层级列表,POI导出嵌套层级列表要实现POI导出EXCEL形如--A1(LV1)----B1(LV2)----B2(LV2)------C1(LV3)------C2(LV3)----B3(LV2)--A1(LV1)⼀.能⽤到的数据字段ID(主键)、PID(⽗科⽬ID)、NAME(名称)、LEVEL(当前层级)⼆.思路:定义⼀个空的科⽬列表⽤来存放已经排好序的科⽬。
创建⼀个迭代器传⼊⽗节点查出它的所有⼦节点,遍历⼦节点插⼊到科⽬列表的同时再次调⽤这个迭代器,这样程序能够在插⼊⼀个节点后如果发现有⼦节点继续插⼊⼦节点。
最后返回排好序的科⽬树。
三.JAVA代码/**** <p>Description: 根据根节点获取嵌套科⽬树</p>* @param root 根节点,只需itemCode* @return嵌套科⽬树*/public List<Subject> getSubjectListByRoot(Subject root){//定义⼀个空的科⽬列表List<Subject> subjectTree = new ArrayList<Subject>();//查询出根节点的具体信息root = this.subjectManager.searchSubjectByCode(root.getItemCode());//将根节点插⼊到嵌套科⽬树⾥,因为迭代出来的科⽬树是没有根节点的subjectTree.add(root);//调⽤迭代器subjectTree = SubjectIteration(root, subjectTree);return subjectTree;}/**** <p>Description: 嵌套科⽬树迭代器</p>* @param subject ⽗节点* @param subjectTree 科⽬树* @return嵌套科⽬树*/public List<Subject> SubjectIteration(Subject subject, List<Subject> subjectTree) {//根据⽗节点查⼦节点List<Subject> subjects = this.subjectManager.searchListSubjectByParent(subject);if (subjects != null) {//遍历⼦节点并迭代for (Subject subjectResult : subjects) {//将节点插⼊到嵌套科⽬树⾥subjectTree.add(subjectResult);SubjectIteration(subjectResult,subjectTree);}}return subjectTree;}四.SQL根据⽗节点查⼦节点的⼀段SQL只需⽐对⽗节点的ID和⼦节点的PID即可五.POI导出/**** <p>Description: 科⽬树导出</p>* @param request* @param response* @return Excel⽂件* @throws Exception*/public ModelAndView downloadExcel(HttpServletRequest request,HttpServletResponse response) throws Exception {//⽂件配置String fileName = new String(("科⽬导出⽂件.xls").getBytes("UTF-8"), "iso-8859-1");response.reset();response.setHeader("Content-disposition", "attachment;filename=" + fileName);response.setContentType("application/vnd.ms-excel;charset=utf-8");//创建POI-workbook⽂件XSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet("科⽬树");//插⼊抬头PoiUtil.addRowSXSSF(sheet, 0, new String[] { "说明:", "level1", "level2", "level3", "level4", "level5", "level6", "level7", "level8" });//调整sheet样式//红CellStyle styleRed = workbook.createCellStyle();styleRed.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);styleRed.setFillForegroundColor(IndexedColors.RED.index);//绿CellStyle styleGreen = workbook.createCellStyle();styleGreen.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);styleGreen.setFillForegroundColor(IndexedColors.LIME.index);//灰CellStyle styleGrey = workbook.createCellStyle();styleGrey.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);styleGrey.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.index);//⽩CellStyle styleWhite = workbook.createCellStyle();styleWhite.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);styleWhite.setFillForegroundColor(IndexedColors.WHITE.index);//⾦黄CellStyle styleGold = workbook.createCellStyle();styleGold.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);styleGold.setFillForegroundColor(IndexedColors.GOLD.index);//黄CellStyle styleYellow = workbook.createCellStyle();styleYellow.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);styleYellow.setFillForegroundColor(IndexedColors.YELLOW.index);//亮黄CellStyle styleLight = workbook.createCellStyle();styleLight.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);styleLight.setFillForegroundColor(IndexedColors.LIGHT_YELLOW.index);//柠檬CellStyle styleLemon = workbook.createCellStyle();styleLemon.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);styleLemon.setFillForegroundColor(IndexedColors.LEMON_CHIFFON.index);//设置抬头颜⾊XSSFRow row = sheet.getRow(0);Cell cell = row.getCell(1);cell.setCellStyle(styleRed);cell = row.getCell(2);cell.setCellStyle(styleGreen);cell = row.getCell(3);cell.setCellStyle(styleGrey);cell = row.getCell(4);cell.setCellStyle(styleWhite);cell = row.getCell(5);cell.setCellStyle(styleGold);cell = row.getCell(6);cell.setCellStyle(styleYellow);cell = row.getCell(7);cell.setCellStyle(styleLight);cell = row.getCell(8);cell.setCellStyle(styleLemon);//查询Excel⽤科⽬树List<Subject> subjectTree = new ArrayList<Subject>();Subject root = new Subject();root.setItemCode("1001");subjectTree = getSubjectListByRoot(root);//插⼊数据int index = 0;for(Subject subject : subjectTree){index = index + 1;Row dataRow = sheet.createRow(index);String lv = subject.getLevel();if(lv.equals("1")){Cell dataCell = dataRow.createCell(0);dataCell.setCellValue(subject.getItemName());dataCell.setCellStyle(styleRed);}else if(lv.equals("2")){Cell dataCell = dataRow.createCell(0);dataCell.setCellValue(subject.getItemName());dataCell.setCellStyle(styleGreen);}else if(lv.equals("3")){Cell dataCell = dataRow.createCell(0);dataCell.setCellValue(subject.getItemName());dataCell.setCellStyle(styleGrey);}else if(lv.equals("4")){Cell dataCell = dataRow.createCell(0);dataCell.setCellValue(subject.getItemName());dataCell.setCellStyle(styleWhite);}else if(lv.equals("5")){Cell dataCell = dataRow.createCell(0);dataCell.setCellValue(subject.getItemName());dataCell.setCellStyle(styleGold);}else if(lv.equals("6")){Cell dataCell = dataRow.createCell(0);dataCell.setCellValue(subject.getItemName());dataCell.setCellStyle(styleYellow);}else if(lv.equals("7")){Cell dataCell = dataRow.createCell(0);dataCell.setCellValue(subject.getItemName());dataCell.setCellStyle(styleLight);}else if(lv.equals("8")){Cell dataCell = dataRow.createCell(0);dataCell.setCellValue(subject.getItemName());dataCell.setCellStyle(styleLemon);}}sheet.setColumnWidth(0, 9000);//创建输出流,⽣成⽂件OutputStream out = new BufferedOutputStream(response.getOutputStream()); workbook.write(out);out.flush();out.close();return null;}。
java嵌套对象序列化_java–使用RestTemplate反序列化嵌套对象使用RestTemplate反序列化嵌套对象是在Java中进行网络请求和处理返回数据的一种常见方式。
在这个过程中,我们通常会遇到需要将返回的数据序列化成嵌套对象的情况。
嵌套对象是指一个对象中包含了其他对象作为其属性或字段的情况。
例如,假设我们有一个User对象,其中包含一个Address对象作为其属性。
在进行网络请求时,我们可能会得到一个包含User对象的JSON字符串,其中包含了Address对象的信息。
首先,我们需要定义一个User类和一个Address类来表示嵌套对象的结构。
```javapublic class Userprivate String name;private int age;private Address address;// 省略构造函数、getter和setter方法public class Addressprivate String city;private String street;private int zipCode;// 省略构造函数、getter和setter方法```接下来,我们可以使用RestTemplate来发送网络请求,并将返回的数据反序列化成嵌套对象。
```javaRestTemplate restTemplate = new RestTemplate(;User user = restTemplate.getForObject(url, User.class);```在这里,我们使用RestTemplate的`getForObject`方法发送GET请求,并将返回的JSON字符串反序列化成User对象。
但是,这样的方式只能将最外层的User对象正确反序列化,而不能正确反序列化嵌套的Address对象。
为了解决这个问题,我们需要使用Jackson库提供的`TypeReference`类。
【主题】探讨Java中的TypeReference和二层嵌套【内容】一、引言Java是一种广泛应用的编程语言,具有强大的面向对象特性和丰富的类库。
在实际开发中,经常会遇到需要处理泛型类型的情况。
本文将深入探讨Java中的TypeReference以及二层嵌套的相关知识,帮助读者更好地理解和运用这些概念。
二、TypeReference的概念和用法1. TypeReference的作用TypeReference是由Jackson JSON库提供的一个泛型类型引用类。
它的主要作用是在运行时保留泛型类型信息,以便在序列化和反序列化时能正确地处理泛型类型。
2. TypeReference的用法在实际使用中,我们可以通过继承TypeReference类并指定泛型类型来创建一个具体的TypeReference对象。
例如:```javapublic class MyType extends TypeReference<List<String>> {} ```通过这样的方式,我们就可以在运行时获取到泛型类型List<String>的信息,从而正确地进行序列化和反序列化操作。
三、二层嵌套的概念和实践1. 二层嵌套的情况在实际开发中,我们经常会遇到二层嵌套的数据结构。
一个List中包含了多个Map,而每个Map又包含了多个对象等等。
这种情况下,我们需要特别注意如何正确处理二层嵌套数据。
2. 二层嵌套的处理方法对于二层嵌套的数据结构,我们可以借助TypeReference来正确地处理泛型类型信息。
通过创建合适的TypeReference对象,我们可以在运行时获取到嵌套结构中各层的泛型类型信息,从而正确地进行序列化和反序列化操作。
四、实际案例分析以下将通过一个实际的案例来演示TypeReference和二层嵌套的使用方法。
假设我们有一个数据结构如下:```javaList<Map<String, SomeObject>> data;```我们需要将这个数据结构转换为JSON字符串并进行反序列化操作。
java中string的contains方法(一)Java中String的contains方法1. 什么是contains方法?String类是Java中常用的类之一,它提供了许多有用的方法来处理字符串。
其中一个常用的方法是contains方法,用于检查一个字符串是否包含指定的字符序列。
2. contains方法的用法参数contains方法接受一个CharSequence类型的参数,可以是一个字符序列或者是一个字符串。
返回值contains方法返回一个boolean值,如果被检查的字符串包含指定的字符序列,则返回true,否则返回false。
3. contains方法的几种用法检查一个单词是否在字符串中String str = "Hello, World!";boolean containsResult = ("World"); (containsResult); // 输出true上述代码中,我们首先定义了一个字符串str,然后使用contains方法检查字符串str是否包含子串”World”。
由于”World”确实出现在str中,所以输出结果为true。
忽略大小写进行检查String str = "Hello, World!";boolean containsResult = ().contains("world"); (containsResult); // 输出true在某些场景下,我们可能需要忽略字符串的大小写进行检查。
可以通过将被检查的字符串和目标字符串都转换为小写或大写来实现。
上述代码中,我们先将str转换为小写,然后再检查是否包含”world”。
检查多个字符序列String str = "Hello, World!";boolean containsResult = ("Hello") && ("World"); (containsResult); // 输出true除了可以检查单个字符序列外,contains方法还可以同时检查多个字符序列。
java 字符串包含方法Java字符串包含方法是Java中常用的字符串操作之一。
字符串包含方法可以用来判断一个字符串是否包含另一个字符串。
在Java中,常用的字符串包含方法有contains()、indexOf()和matches()等。
首先介绍的是contains()方法。
contains()方法用于判断一个字符串是否包含指定的字符序列。
它的使用格式为:字符串.contains(字符序列)。
contains()方法返回一个布尔值,如果字符串包含指定的字符序列,则返回true,否则返回false。
例如,我们有一个字符串str,内容为"Hello World",我们想要判断它是否包含子串"World",可以使用contains()方法来实现:```javaString str = "Hello World";boolean result = str.contains("World");System.out.println(result); // 输出结果为true```接下来介绍的是indexOf()方法。
indexOf()方法用于返回指定字符或子串在字符串中第一次出现的位置。
它的使用格式为:字符串.indexOf(字符或子串)。
indexOf()方法返回一个整数值,表示字符或子串在字符串中的索引位置,如果没有找到,则返回-1。
例如,我们有一个字符串str,内容为"Hello World",我们想要查找子串"World"在字符串中的位置,可以使用indexOf()方法来实现:```javaString str = "Hello World";int index = str.indexOf("World");System.out.println(index); // 输出结果为6```需要注意的是,indexOf()方法返回的索引位置是从0开始计数的。
java解析多层嵌套json字符串1. com.alibaba.fastjson2.多层解析java分别解析下⾯两个json字符串package jansonDemo;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;public class TestJSON {/*** JSON实际上也是键值对("key":"value")* key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)* value如果是字符串,⽤jsonobj.getString("key")获取* value如果是数字,⽤jsonobj.getIntValue("key"),jsonobj.getFloatValue("key"),jsonobj.getInteger("key")等基本数据类型及其包装类的⽅法获取* value如果是布尔值,⽤jsonobj.getBoolean("key"),jsonobj.getBooleanValue("key")获取* value如果是数组,⽤jsonobj.getJSONArray("key")获取* value如果是Object对象,⽤jsonobj.get("key"),获取* value如果是JSONObject对象,⽤jsonobj.getJSONObject("key")获取*//*** 该⽅法⽤于将已有的json字符串转换为json对象,并取出该对象中相应的key对应的value值* 将已有的字符串转换成jsonobject,⽤JSON.parseObject(jsonStr)⽅法* json中只要是{}就代表⼀个JSONObject,[]就代表⼀个JSONArray* 获取JSONObject对象⽤JSONObject jsonobject.getJSONObject("key")⽅法* 获取JSONArray对象⽤JSONObject jsonobject.getJSONArray("key")⽅法*/private static void strWritedToJSONObject() {//以下是⼀个json对象中嵌套⼀个json⼦对象String myJsonObj = "{\n" +" \"name\":\"runoob\",\n" +" \"alexa\":10000,\n" +" \"sites\": {\n" +" \"site1\":\"\",\n" +" \"site2\":\"\",\n" +" \"site3\":\"\"\n" +" }\n" +"}";JSONObject jsonobj = JSON.parseObject(myJsonObj); //将json字符串转换成jsonObject对象/***获取JSONObject中每个key对应的value值时,可以根据实际场景中想得到什么类型就分别运⽤不到的⽅法***/System.out.println(jsonobj.get("name")); //取出name对应的value值,得到的是⼀个objectSystem.out.println(jsonobj.getString("name")); //取出name对应的value值,得到的是⼀个StringSystem.out.println(jsonobj.getIntValue("alexa")); //取出name对应的value值,得到的是⼀个intSystem.out.println(jsonobj.get("sites")); //取出sites对应的value值,得到的是⼀个objectSystem.out.println(jsonobj.getString("sites"));System.out.println(jsonobj.getJSONObject("sites")); //取出sites对应的value值,得到⼀个JSONObject⼦对象System.out.println(jsonobj.getJSONObject("sites").getString("site2")); //取出嵌套的JSONObject⼦对象中site2对应的value值,必须⽤getJSONObject()先获取JSONObject /*** 以下是⼀个json对象中包含数组,数组中⼜包含json⼦对象和⼦数组*/String myJsonObj2 = "{\n" +" \"name\":\"⽹站\",\n" +" \"num\":3,\n" +" \"sites\": [\n" +" { \"name\":\"Google\", \"info\":[ \"Android\", \"Google 搜索\", \"Google 翻译\" ] },\n" +" { \"name\":\"Runoob\", \"info\":[ \"菜鸟教程\", \"菜鸟⼯具\", \"菜鸟微信\" ] },\n" +" { \"name\":\"Taobao\", \"info\":[ \"淘宝\", \"⽹购\" ] }\n" +" ]\n" +"}";JSONObject jsonobj2 = JSON.parseObject(myJsonObj2); //将json字符串转换成jsonObject对象System.out.println(jsonobj2.get("sites"));System.out.println(jsonobj2.getString("sites"));System.out.println(jsonobj2.getJSONArray("sites")); //取出sites对应的value值,得到⼀个JSONOArray对象//System.out.println(jsonobj2.getJSONObject("sites")); 不能⽤该⽅法,因为sites是⼀个JSONOArray对象//取出json对象中sites对应数组中第⼀个json⼦对象的值System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0)); //得到结果:{"name":"Google","info":["Android","Google 搜索","Google 翻译"]} System.out.println(jsonobj2.getJSONArray("sites").get(0));System.out.println(jsonobj2.getJSONArray("sites").getString(0));//取出json对象中sites对应数组中第⼀个json⼦对象下⾯info对应的嵌套⼦数组值System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0).getJSONArray("info")); //得到结果:["Android","Google 搜索","Google 翻译"] //取出json对象中sites对应数组中第⼀个json⼦对象下⾯info对应的嵌套⼦数组中第⼆个值System.out.println(jsonobj2.getJSONArray("sites").getJSONObject(0).getJSONArray("info").getString(1)); //得到结果:Google 搜索//依次取出json对象中sites对应数组中的值JSONArray array = jsonobj2.getJSONArray("sites");getJsonArrayItem(array);//依次取出json对象中sites对应数组中第⼆个json⼦对象下⾯info对应的嵌套⼦数组值JSONArray arr = jsonobj2.getJSONArray("sites").getJSONObject(1).getJSONArray("info");getJsonArrayItem(arr);}/*** ⼿动添加对象到⼀个JSONObject*/private static void writeStrToJSONObject() {JSONObject jsonObject = new JSONObject();jsonObject.put("name","tom");jsonObject.put("age",20);JSONArray jsonArray = new JSONArray();JSONObject jsonArrayObject1 = new JSONObject();jsonArrayObject1.put("name","alibaba");jsonArrayObject1.put("info","");JSONObject jsonArrayObject2 = new JSONObject();jsonArrayObject2.put("name","baidu");jsonArrayObject2.put("info","");jsonArray.add(jsonArrayObject1);jsonArray.add(jsonArrayObject2);jsonObject.put("sites",jsonArray);System.out.println(jsonObject);}/*** 将字符串转为JSONArray*/private static void strToJsonArray() {String arrayStr = "[\n" +" {\n" +" \"name\":\"alibaba\",\n" +" \"info\":\"\"\n" +" },\n" +" {\n" +" \"name\":\"baidu\",\n" +" \"info\":\"\"\n" +" }\n" +" ]";JSONArray array = JSON.parseArray(arrayStr);System.out.println(array);}/*** 依次取出JSONArray中的值*/private static void getJsonArrayItem(JSONArray array) {for (int i=0; i<array.size(); i++) {System.out.println(array.get(i));}}//测试类public static void main(String[] args) {strWritedToJSONObject();//writeStrToJSONObject();//strToJsonArray();}}⼩结:如果是{ } ⽤ getJSONObject [ ] ⽤ getJSONArrayJSONArray内的{ },⽤for循环遍历:String s = "[{\"success\":true,\"data\":[{\"building_id\":\"***\",\"building_num\":\"**\",\"room_name\":\"**\",\"door_name\":\"**\",\"electric\":\"**\"}]}]"; JSONArray ja = jsonx.getJSONArray("data");for (int i = 0; i < ja.size(); i++) {JSONObject jo = ja.getJSONObject(i);String building_id = jo.getString("building_id");}3.JsonObject判断⼀个json串中是否含有某个key值public static void main(String[] args) throws JSONException { String jsonStr = "{'content':['','','',''],'Baseline':{'content':['1','2'],'BaselineName':'JC','BaselineId':'813xxx'}}"; JSONObject jsonObject = new JSONObject(jsonStr); //这⾥调⽤JSONObject 的has⽅法来判断⼀个key值是否存在,如果存在返回true if(jsonObject .has("Baseline")){ //这⾥对应当前key值存在后的操作 JSONObject jsonObject2 = (JSONObject)jsonObject.get("Baseline"); ...... ...... }}4.fastjson如何判断JSONObject和JSONArray/*** 单层的orgJson判断是否是JSONObject还是JSONArray.*/public static void simpleJSONObjectOrgJson() {String message = "[{\r\n" + " \"DataSource\": \"'P33'\",\r\n"+ " \"DataStamp\": \"'2018-08-25'\",\r\n" + " \"GovScCode\": \"'aaa'\",\r\n"+ " \"OperEffDate\": \"'2018-05-02'\",\r\n" + " \"OrgCode\": \"'ww'\",\r\n"+ " \"OrgDesc\": \"'ss'\",\r\n" + " \"OrgId\": \"1\",\r\n"+ " \"OrgName\": \"'11111'\",\r\n" + " \"OrgSeq\": \"11\",\r\n"+ " \"OrgShortName\": \"'ss'\",\r\n" + " \"OrgStatus\": \"'ss'\",\r\n"+ " \"OrgType\": \"'ss'\",\r\n" + " \"ParentOrgId\": \"0\",\r\n"+ " \"RegAddress\": \"'ww'\",\r\n" + " \"RegDate\": \"\",\r\n" + " \"RegionId\": \"1\"\r\n"+ " }]";Object json = new JSONTokener(message).nextValue();if (json instanceof JSONObject) {JSONObject jsonObject = (JSONObject) json;System.out.println(jsonObject);//⾃⾏解析即可} else if (json instanceof JSONArray) {JSONArray jsonArray = (JSONArray) json;System.out.println(jsonArray);//⾃⾏解析即可}}以上是此次项⽬遇到的问题,感谢以下⼤佬分享:。
java ql表达式嵌套方法标题:深入理解Java QL表达式与嵌套方法Java QL(Query Language)是一种强大的查询语言,主要用于在Java 中进行数据查询和操作。
QL表达式与嵌套方法的结合使用,可以极大地提高代码的效率和可读性。
本文将详细解析Java QL表达式以及如何在其中嵌套方法。
一、Java QL表达式基础Java QL表达式是一种基于Java的查询语言,主要用于在Java应用程序中进行数据查询和操作。
它提供了一种简洁、灵活的方式来表达复杂的查询条件和操作。
1. 基本语法Java QL表达式的最基本形式是“select ... from ... where ...”。
其中,“select”用于指定要查询的数据项,“from”用于指定数据源,“where”用于设置查询条件。
例如,以下是一个简单的Java QL表达式示例:javaList<Employee> employees = queryFactory.selectFrom(employee).where(employee.age.gt(30)).fetch();在这个例子中,我们从"employee"数据源中选择所有年龄大于30的员工。
2. 运算符Java QL表达式支持各种运算符,包括比较运算符(如">"、"<"、"="等)、逻辑运算符(如"and"、"or"、"not"等)以及谓词函数(如"like"、"isNull"等)。
3. 聚合函数Java QL表达式还支持各种聚合函数,如"count"、"sum"、"avg"、"min"、"max"等。
Java处理字符串搜索嵌套结构的方法
在用Java分析HTML文本时,如果要取出有嵌套结构的节点之间的内容,不能直接用正则表达式来处理,因为Java所带的正则表达式不支持嵌套结构的描述,虽然Perl、.Net、PHP 可以支持。
这时可以先用正则表达式找出节点在字符串中的位置,然后对节点进行匹配处理,取出匹配节点之间的内容,实现对嵌套结构的处理。
例如要从
1.<pre name="code" class="java">data=<div><div>abcd<div></div><form>
2.<input type='button' value='submit'/></form></div></div><div>1234</div>
中取出<div></div>之间的内容,希望返回两个字符串
1.<pre name="code" class="java"><div>abcd<div></div><form>
2.<input type='button' value='submit'/></form></div><pre name="code" class
="html">和1234。
源代码如下:
为了记录节点在字符串中的值和位置,先定义一个类,保存这些信息:
1.public class Tag {
2.
3. public Tag(String value, int beginPos, int endPos) {
4. super();
5. this.value = value;
6. this.beginPos = beginPos;
7. this.endPos = endPos;
8. }
9. private String value;
10. private int beginPos;
11. private int endPos;
12. public String getValue() {
13. return value;
14. }
15. public void setValue(String value) {
16. this.value = value;
17. }
18. public int getBeginPos() {
19. return beginPos;
20. }
21. public void setBeginPos(int beginPos) {
22. this.beginPos = beginPos;
24. public int getEndPos() {
25. return endPos;
26. }
27. public void setEndPos(int endPos) {
28. this.endPos = endPos;
29. }
30.
31.}
从字符串中获取节点之间内容的函数如下:
1. /**
2. * 获取字符串之间的内容,如果包含嵌套,则返回最外层嵌套内容
3. *
4. * @param data
5. * @param stag 起始节点串
6. * @param etag 结束节点串
7. * @return
8. */
9.public List<String> get(String data,String stag, String etag){
10. // 存放起始节点,用于和结束节点匹配
11. Stack<Tag> work = new Stack<Tag>();
12. // 保存所有起始和结束节点
13. List<Tag> allTags = new ArrayList<Tag>();
14.
15. // 在元字符前加转义符
16. String nstag = stag.replaceAll("([\*\.\+\(\]\[\?\{\}\^\$\|\\])", "\\
$1");
17. String netag = etag.replaceAll("([\*\.\+\(\]\[\?\{\}\^\$\|\\])", "\\
$1");
18.
19. String reg = "((?:"+nstag+")|(?:"+netag+"))";
20.
21. Pattern p = pile(reg, Pattern.CASE_INSENSITIVE|Pattern.MU
LTILINE);
22.
23. Matcher m = p.matcher(data);
24.
25. while(m.find()){
26. Tag tag = new Tag(m.group(0),m.start(),m.end());
27. allTags.add(tag);
28. }
29. // 保存开始结束节点之间的内容,不含节点
30. List<String> result = new ArrayList<String>();
32. for(Tag t : allTags){
33. if (stag.equalsIgnoreCase(t.getValue())){
34. work.push(t);
35. }else if(etag.equalsIgnoreCase(t.getValue())){
36. // 如果栈已空,则表示不匹配
37. if (work.empty()){
38. throw new RuntimeException("pos "+t.getBeginPos()+" tag
not match start tag.");
39. }
40. Tag otag = work.pop();
41. // 如果栈为空,则匹配
42. if (work.empty()){
43. String sub = data.substring(otag.getEndPos(), t.getBegin
Pos());
44. result.add(sub);
45. }
46. }
47.
48. }
49.
50. // 如果此时栈不空,则有不匹配发生
51. if (!work.empty()){
52. Tag t = work.pop();
53. throw new RuntimeException("tag "+t.getValue()+ "not match.");
54. }
55.
56. return result;
57.
58.}
函数返回节点之间内容串组成的列表。
例如调用 get(data,"<div>", "</div>") 返回含有两个元素的列表,元素分别为
1.<div>abcd<div></div><form><input type='button' value='>'/></form></div>,
1234
需要注意的是如果节点含有正则表达式的元字符,需要在元字符前加转义符\,源代码中第16,17行实现此功能。
原文出处:中软卓越 。