如何在Java中使用分隔符在所有大写单词之后拆分字符串?

Posted

技术标签:

【中文标题】如何在Java中使用分隔符在所有大写单词之后拆分字符串?【英文标题】:How to split a string after all uppercase words using a delimiter in Java? 【发布时间】:2021-11-18 16:28:51 【问题描述】:

我正在尝试按如下方式解析此字符串:

CREATE TABLE tbl_1 (a1 int, a2 varchar(20));

收件人:

CREATE TABLE 

tbl_1 (a1 int, a2 varchar(20));

我将如何在 Java 中使用分隔符来执行此操作?

我能够解析:

CREATE DATABASE db_1;

收件人:

CREATE DATABASE 

db_1;

使用此代码,但它不适用于帖子开头的语句。

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("\s((?=[a-z][a-z]))");
    
    int i = 0;
    while (parse.hasNext())
    
        num[i] = parse.next();
        System.out.println("Output " + i + " is: " + num[i]);
        
        if(num[i].contains("CREATE DATABASE"))
        
            System.out.println("YOOOOOOO");
            
        
        
        i++;
    

【问题讨论】:

【参考方案1】:

可以使用不同的方法正确完成,但使用扫描仪分隔符的方法:

parse.useDelimiter("(?<=[A-Z])\\s");

这会分割前面有大写字母的空格。

并非完全在所有情况下都正确,但应该适用于解析 SHOUTED KEYWORDS 格式的 SQL 的情况。

【讨论】:

【参考方案2】:

切换到这个正则表达式:

parse.useDelimiter("(?=tbl)");

你也可以传递任何你想要的分隔符,用:

String delimiter = "tbl";
parse.useDelimiter("(?="+delimit+")");

这会在您想要的 String 之前找到第一个出现的空格。

【讨论】:

以上是关于如何在Java中使用分隔符在所有大写单词之后拆分字符串?的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 单词拆分 II java

在Java中拆分多个分隔符[关闭]

如何在python中拆分具有多个分隔符的字符串? [复制]

如何使用正则表达式提取骆驼大小写字符串的所有单词?

Java - 正则表达式拆分输入文本但保留分隔符[重复]

如何使用分隔符数组在 Java 中使用多个分隔符拆分字符串? [复制]