You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:18:00