从字符串中提取最接近的句子



我正在编写一个非常小的SQL编辑器,主要是为了新颖性。我现在能够执行所有语句,只需用分号拆分整个文本,然后一个接一个地运行语句。

但是,我希望实现一个功能,我只运行最靠近光标的语句,但我对如何做到这一点感到困惑。我一直在看似乎有用的BreakIterator,但它并没有真正帮助我获得我需要的陈述。

这些是我需要支持的情况:光标位于 |

  1. SELECT * FROM something;| 光标位于分号之后
  2. SELECT * FROM so|mething; 语句中的光标
  3. SELECT * FROM somethingnLEFT |JOIN foo USING (bar);语句跨越多行,同样将光标放在分号之后或语句内。

对此的简单解决方案有什么想法吗?

你可以试试这个:

// assuming the editorText is the contents of the edit window
String[] statements = editorText.split(";");
int statementCharactersProcessed = 0;
// assuming caret is at position caretIndex
int statementIndex = 0;
String statement;
while (caretIndex>statementCharactersProcessed+1) {
    // re-add the missing ;
    statement = statements[statementIndex++] + ";";
    statementCharactersProcessed += statement.length;
}
// statement should now be the value you're looking for

我认为您想要的逻辑是运行光标范围内的所有语句。

通过"光标的范围",我的意思是:从前一个分号到下一个分号之间的所有分号,从光标位置所在的行的开头开始(因此,如果光标在分号之后 - 转到行的开头并应用此逻辑)

我不知道要实现它,但我可以建议您是否可以检查光标位置前后的分号。 并执行这些分号之间的语句应该对您有所帮助。

:)

最新更新