Java中如何使用分隔符在全大写单词段后拆分字符串?
问题根因
你原有代码的分隔符正则没有明确匹配目标SQL关键字,仅靠后续标识符的小写规则判断拆分位置,适配性差,调整正则即可同时支持CREATE TABLE和CREATE DATABASE两类语句的拆分需求。
核心修改方案
将分隔符正则替换为(?<=CREATE (DATABASE|TABLE))\\s,该正则仅匹配紧跟在CREATE DATABASE或CREATE TABLE关键字后面的空格作为分隔符,不会误拆分关键字内部的空格,也不受后续标识符大小写影响。
完整修改后代码
import java.util.Scanner; public class SqlParser { public static void read() { Scanner scanner = new Scanner(System.in); System.out.print("-->"); String input = scanner.nextLine(); String [] num = new String[10]; Scanner parse = new Scanner(input); // 核心修改:替换分隔符正则 parse.useDelimiter("(?<=CREATE (DATABASE|TABLE))\\s"); int i = 0; while (parse.hasNext()) { num[i] = parse.next(); System.out.println("Output " + i + " is: " + num[i]); if(num[i].contains("CREATE DATABASE") || num[i].contains("CREATE TABLE")) { // 原有自定义逻辑可按需扩展 System.out.println("YOOOOOOO"); } i++; } parse.close(); scanner.close(); } public static void main(String[] args) { read(); } }
效果验证
- 输入
CREATE TABLE tbl_1 (a1 int, a2 varchar(20));,拆分结果:
第一组:CREATE TABLE
第二组:tbl_1 (a1 int, a2 varchar(20)); - 输入
CREATE DATABASE db_1;,拆分结果:
第一组:CREATE DATABASE
第二组:db_1;
完全符合预期输出要求。如果后续需要支持更多双单词开头的SQL关键字(如CREATE INDEX、CREATE VIEW),直接在正则的括号中新增对应关键字即可,示例:(?<=CREATE (DATABASE|TABLE|INDEX|VIEW))\\s。
内容的提问来源于stack exchange,提问作者DuckieOnQuack
相关产品推荐
相关产品推荐

