java split string,只保留特定单词后的所有内容

时间:2016-03-01 17:13:05

标签: java regex string split

我有一个我需要拆分的字符串

SELECT a, b, c FROM X....

我需要拆分它,只保留“从......开始”。现在我有这个,但我认为它实际上会摆脱FROM字符串也是正确的吗?

String query = xyz.getQuery();
String [] newQuery = query.split("FROM");
String splitQuery = newQuery[1];

3 个答案:

答案 0 :(得分:1)

为什么你需要regex呢?

没有正则表达式

Sol 1

将此添加到您的代码中

String splitQuery = "FROM " + newQuery[1];

Sol 2

System.out.println(line.substring(line.indexOf("FROM")));

如果您仍然需要regex

String line = "SELECT a, b, c FROM X....";
String pattern = "((FROM|from).*)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);

if (m.find()) {
     System.out.println("Found value: " + m.group(0));
}

答案 1 :(得分:0)

你可以试试这个,而不是分裂。假设您只想要在第一个FROM之后写入的内容而不是任何嵌套FROM中的内容:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Solution {


    public String getSubString(String s)
    {
        Pattern p = Pattern.compile("FROM.+");
        Matcher m = p.matcher(s);

        if(m.find())
        {
            return m.group(0);
        }

        return null;
    }

    public static void main(String[] args) {

        String query = "SELECT a, b, c FROM myTable";
        Solution sol = new Solution();

        String ans = sol.getSubString(query);

        if(ans != null)
        {
            System.out.println(ans);
        }
        else
        {
            System.out.println("Not Found");
        }
    }
}

除此之外,更好的方法是首先获取FROM的起始位置,然后从该点使用substring方法到字符串的长度。

答案 2 :(得分:0)

除了分裂和可能的前瞻之外,所以你不要摆脱“FROM”。

@Test
public void testRegex(){

    String query = "SELECT a, b, c FROM x y z";
    String regex = "(?=FROM.*)|(?=from.*)";
    System.out.println(query.split(regex)[1]);

    assertEquals("FROM x y z", query.split(regex)[1]);
}
  

FROM x y z