提问者:小点点

根据文件中的上一个单词和下一个单词替换一个单词,使用java


我有一个SQL文件,我想用别的东西替换一个单词。但是这里的问题是,我会根据前两个单词和下一个单词的出现来替换这个单词。

例如,如果SQL文件包含"INSERT INTOtable_nameVALUES",那么我只想在表名中添加一个括号并将其大写。

因此,在更改之后,它将是"INSERT INTO[TABLE_NAME]VALUES"

我尝试过使用FileInputStreamFileOutputStream,但我发现它在我的情况下可能效率不高。该文件有很多INSERT语句。

请为此提出一些有效的想法。


共1个答案

匿名用户

您可以使用Pattern与这个正则表达式(. *? \ . *? \ )(. *?)( \s.*)((.*?\\s){2})(.*?)(\\s.*)像这样

String query = "INSERT INTO table_name VALUES";

Pattern pattern = Pattern.compile("(.*?\\s+.*?\\s+)(.*?)(\\s.*)");
Matcher matcher = pattern.matcher(query);
while (matcher.find()) {
    query = matcher.group(1) + 
            String.format("[%s]", matcher.group(2).toUpperCase()) + 
            matcher.group(3);
}

System.out.println(query);

输出

INSERT INTO [TABLE_NAME] VALUES

详情:

  1. (. *? \s . *? \s)匹配前两个词
  2. (. *?) 匹配表名
  3. (\s.*)