Java中 将字符串“CalendarXX{XSDM = 11, KCDM = 11, KCMC = 11, JSMC = 11, GXSJ = 11, KKXN = 11, SKZC = 11, XQ = 11, JSJC = 11, KSJC = 11}”转换为实体类
时间: 2025-04-06 17:08:47 浏览: 20
在Java中,如果需要将类似于`"CalendarXX{XSDM = 11, KCDM = 11, KCMC = 11, JSMC = 11, GXSJ = 11, KKXN = 11, SKZC = 11, XQ = 11, JSJC = 11, KSJC = 11}"`这种自定义格式的字符串转化为实体类对象,则无法直接通过类似JSON解析工具如Jackson或Gson等框架实现。这是因为该字符串并非标准的数据交换格式(如JSON、XML),而是一个模拟的打印输出样式。
此时可以手动编写解析逻辑来完成转换工作。以下是具体的步骤及其实现示例:
---
### 步骤分析
1. **创建实体类**:根据给定的字段名称设计对应的实体类。
2. **提取关键部分**:去掉多余的前缀和大括号,仅保留实际键值对的部分。
3. **分割成键值对数组**:按逗号分隔每一对键值组合,并进一步拆分为键和值两部分。
4. **赋值操作**:遍历所有键值对并将结果填充进已构建好的实体类对象当中。
下面是完整代码展示:
---
### 示例代码
#### 定义实体类 `CalendarXX`
```java
public class CalendarXX {
private String xsdm; // 学生代码
private String kcdm; // 课程代码
private String kcmc; // 课程名称
private String jsmc; // 教师名称
private String gxsj; // 更新时间
private String kkxn; // 开课学年
private String skzc; // 上课周次
private String xq; // 星期
private String jsjc; // 节始节次
private String ksjc; // 结束节次
// 自动生成Getter和Setter方法
}
```
#### 编写解析函数
```java
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) {
String input = "CalendarXX{XSDM = 11, KCDM = 11, KCMC = 11, JSMC = 11, GXSJ = 11, KKXN = 11, SKZC = 11, XQ = 11, JSJC = 11, KSJC = 11}";
try {
CalendarXX calendarXX = parseStringToObject(input);
// 打印测试
System.out.println("学生代码:" + calendarXX.getXsdm());
System.out.println("课程代码:" + calendarXX.getKcdm());
System.out.println("课程名称:" + calendarXX.getKcmc());
System.out.println("教师名称:" + calendarXX.getJsmc());
System.out.println("更新时间:" + calendarXX.getGxsj());
System.out.println("开课学年:" + calendarXX.getKkxn());
System.out.println("上课周次:" + calendarXX.getSkzc());
System.out.println("星期:" + calendarXX.getXq());
System.out.println("开始节次:" + calendarXX.getJsjc());
System.out.println("结束节次:" + calendarXX.getKsjc());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 将字符串解析为实体类对象
*
* @param str 输入字符串
* @return 解析后的实体类对象
* @throws Exception 若发生错误则抛出异常
*/
public static CalendarXX parseStringToObject(String str) throws Exception {
if (str == null || !str.startsWith("CalendarXX")) {
throw new IllegalArgumentException("输入字符串不符合预期格式!");
}
CalendarXX result = new CalendarXX();
// 去掉首尾多余字符 "{", "}"
int startIdx = str.indexOf("{") + 1;
int endIdx = str.lastIndexOf("}");
String content = str.substring(startIdx, endIdx).trim();
// 使用 StringTokenizer 按照 "," 分割每一组键值对
StringTokenizer tokenizer = new StringTokenizer(content, ",");
while (tokenizer.hasMoreTokens()) {
String pair = tokenizer.nextToken().trim(); // 获取单个键值对
String key = "";
String value = "";
// 再次切割 "=" 左右两侧的内容
if (pair.contains("=")) {
key = pair.split("\\s*=\\s*")[0].trim();
value = pair.split("\\s*=\\s*")[1].trim();
switch (key.toUpperCase()) { // 统一转为大写便于匹配
case "XSDM":
result.setXsdm(value);
break;
case "KCDM":
result.setKcdm(value);
break;
case "KCMC":
result.setKcmc(value);
break;
case "JSMC":
result.setJsmc(value);
break;
case "GXSJ":
result.setGxsj(value);
break;
case "KKXN":
result.setKkxn(value);
break;
case "SKZC":
result.setSkzc(value);
break;
case "XQ":
result.setXq(value);
break;
case "JSJC":
result.setJsjc(value);
break;
case "KSJC":
result.setKsjc(value);
break;
default:
System.err.println("未识别的关键字:" + key);
}
}
}
return result;
}
}
```
---
### 输出效果
运行以上程序后将会得到以下输出:
```
学生代码:11
课程代码:11
课程名称:11
教师名称:11
更新时间:11
开课学年:11
上课周次:11
星期:11
开始节次:11
结束节次:11
```
---
阅读全文
相关推荐






