Note-------------substring

本文详细解释了在不同编程语言中如何使用substring方法进行字符串截取。重点对比了JavaScript和其他高级语言中参数arg2的不同含义:前者表示结束索引,后者表示截取长度。
substring(arg1,arg2) 注意事项
arg1都表示 字符串起始索引
而arg2 有所不同
在javascript中 arg2是表示 到那个索引之间  截取
在其他高级语言中  arg2表示 截取的个数
在Java中处理上传的`MultipartFile`文件并解析其中包含科学计数法(如`D6-1.5`)格式的数值,可以借助Apache POI库来解析Excel文件,同时处理数值格式。下面是一个详细的实现步骤和代码示例。 ### 解析MultipartFile文件 1. **依赖配置** 在`pom.xml`中添加Apache POI和Spring相关依赖: ```xml <!-- Apache POI 用于解析Excel --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> <!-- Spring Web 依赖 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.20</version> </dependency> ``` 2. **文件解析逻辑** 通过`MultipartFile`读取上传的Excel文件,并使用Apache POI逐行逐列解析数据。对于科学计数法格式的数值(如`D6-1.5`),需要自定义解析逻辑。 ```java import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.multipart.MultipartFile; import java.io.InputStream; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.Iterator; public void parseExcel(MultipartFile file) { try (InputStream inputStream = file.getInputStream()) { Workbook workbook = new XSSFWorkbook(inputStream); Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { Cell cell = cellIterator.next(); String cellValue = ""; switch (cell.getCellType()) { case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { cellValue = cell.getDateCellValue().toString(); } else { double numericValue = cell.getNumericCellValue(); // 自定义格式化科学计数法 NumberFormat formatter = new DecimalFormat("0.###E0"); cellValue = formatter.format(numericValue); } break; case STRING: cellValue = cell.getStringCellValue(); break; case BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()); break; case FORMULA: cellValue = cell.getCellFormula(); break; case BLANK: cellValue = ""; break; default: cellValue = ""; } // 处理科学计数法格式(如 D6-1.5) if (cellValue.contains("E")) { cellValue = parseScientificNotation(cellValue); } System.out.print(cellValue + "\t"); } System.out.println(); } } catch (Exception e) { e.printStackTrace(); } } ``` 3. **处理科学计数法格式** 针对类似`D6-1.5`格式的科学计数法,需要解析其表示的数值。假设`D6`代表`10^6`,`-1.5`表示乘以`-1.5`,可以自定义解析函数: ```java public String parseScientificNotation(String value) { if (value.contains("E")) { String[] parts = value.split("E"); double base = Double.parseDouble(parts[0]); int exponent = Integer.parseInt(parts[1]); double result = base * Math.pow(10, exponent); return String.valueOf(result); } return value; } ``` ### 处理特殊格式 D6-1.5 如果`D6-1.5`表示的是`-1.5 × 10^6`,可以手动解析该格式: ```java public double parseD6Format(String value) { if (value.startsWith("D6")) { String numberPart = value.substring(2); // 去掉"D6" double base = Double.parseDouble(numberPart); return base * Math.pow(10, 6); } return Double.parseDouble(value); } ``` ### 数据存储 解析完成后,可以将数据存储到数据库中。例如,将数据插入到`tb_user`表中: ```java // 假设有一个JDBC连接 String sql = "INSERT INTO tb_user (id, user_name, password, name, age, sex, birthday, created, updated, note) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; try (PreparedStatement pstmt = connection.prepareStatement(sql)) { pstmt.setInt(1, id); pstmt.setString(2, userName); pstmt.setString(3, password); pstmt.setString(4, name); pstmt.setInt(5, age); pstmt.setInt(6, sex); pstmt.setDate(7, new java.sql.Date(birthday.getTime())); pstmt.setDate(8, new java.sql.Date(created.getTime())); pstmt.setDate(9, new java.sql.Date(updated.getTime())); pstmt.setString(10, note); pstmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值