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

时间:2015-04-14 07:43:05

标签: java string

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

但是,我希望实现一个功能,我只运行最接近光标的语句,但我很难知道如何执行此操作。 我一直在看BreakIterator这似乎有用,但它并没有真正帮助我得到我需要的陈述。

这些是我需要支持的案例: 光标位于|

  1. SELECT * FROM something;|光标放在分号后面
  2. SELECT * FROM so|mething;光标置于语句
  3. SELECT * FROM something\nLEFT |JOIN foo USING (bar);语句跨越多行,同样将光标放在分号后面或语句中。
  4. 为此提供简单解决方案的任何想法?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

你可以试试这个:

// 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

答案 2 :(得分:0)

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

:)