Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串中提取最近的句子_Java_String - Fatal编程技术网

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

Java 从字符串中提取最近的句子,java,string,Java,String,我正在写一个非常小的SQL编辑器,主要是为了新奇。 我现在可以执行所有语句,只需将整个文本用分号分割,然后依次运行一条语句 然而,我希望实现一个特性,在这个特性中,我只运行最靠近光标的语句,但我不知道如何做到这一点。 我一直在研究BreakIterator,它似乎很有用,但它并不能真正帮助我获得所需的语句 以下是我需要支持的案例: 光标位于| 从某物中选择*|光标放在分号后 从so方法中选择*放置在语句中的光标 SELECT*FROM something\nLEFT |使用(bar)连接foo语

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

然而,我希望实现一个特性,在这个特性中,我只运行最靠近光标的语句,但我不知道如何做到这一点。 我一直在研究
BreakIterator
,它似乎很有用,但它并不能真正帮助我获得所需的语句

以下是我需要支持的案例: 光标位于|

  • 从某物中选择*|光标放在分号后
  • 从so方法中选择*放置在语句中的光标
  • SELECT*FROM something\nLEFT |使用(bar)连接foo语句跨越几行,同样将光标放在分号后或语句内

  • 有什么简单的解决方案吗?

    我认为您需要的逻辑是运行游标范围内的所有语句

    我所说的“光标范围”是指:从上一个分号到下一个分号之间,从光标位置所在行的开始(因此,如果光标位于分号之后,请转到行的开始并应用此逻辑)

    您可以尝试以下操作:

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

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


    :)

    您是否使用小程序或某个文本编辑器接受用户输入此链接可让您知道光标位置,并可从此处获取下一个查询片段,不,我正在修改JTextArea。我可以使用getCaretPosition()获取光标位置,但我不确定如何以干净的方式覆盖我提到的所有情况。这确实是我想要的,但也是光标位于最后分号后面的角落情况。这实际上是一种非常常见的情况,当你写语句时,你完成了分号,所以插入符号现在就在后面了。是的,我更新了答案-它回答了问题吗?结束。唯一的问题是第三种情况,多行语句,但由于同样的逻辑适用,我接受你的答案。我希望有一种比从光标来回扫描更简单的方法,但是哦,好吧。我会看看我是否能用
    indexOf()
    找到我的位置。太好了!唯一缺少的是结尾的语句上有一个
    .trim()
    。此算法中可能还有其他一些褶皱。。。不过,这是一个不错的开始!