java - 如何在Java中使用分隔符在所有大写单词之后拆分字符串?
问题描述
我正在尝试按如下方式解析此字符串:
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++;
}
解决方案
可以使用不同的方法正确完成,但使用扫描仪分隔符的方法:
parse.useDelimiter("(?<=[A-Z])\\s");
这会拆分前面有大写字母的空格。
并非在所有情况下都完全正确,但应该适用于解析 SHOUTED KEYWORDS 格式化 SQL 的情况。
推荐阅读
- razor - .NET Core (3.0) MVC - 如何重定向到不同的视图/.cshtml 页面?
- javascript - 滚动Highcharts中图表的X轴时如何修复工具提示的位置
- reactjs - 尝试使用 React-SearchKit 连接到 ElasticSearch 7 时出现错误 405(方法不允许)
- sql-server - 有没有办法使用 SQL Server 的代码片段功能来调用存储过程,其参数为空值?
- wordpress - 基于 aria 更改 SASS 父样式
- android - IONIC 5,一些 css/Scss 在浏览器中可以正常工作,但在手机中不能
- ruby - 使用 rvm 设置 ruby 时输出不是预期的
- python - Numpy 连接列表,其中第一列在范围 n 中
- symfony - 如何使用 PHP 和 Symfony 设置 cookie?
- c++ - C++ — `algorithm` 库和命名空间 `std`