我有一个我需要拆分的字符串
SELECT a, b, c FROM X....
我需要拆分它,只保留“从......开始”。现在我有这个,但我认为它实际上会摆脱FROM字符串也是正确的吗?
String query = xyz.getQuery();
String [] newQuery = query.split("FROM");
String splitQuery = newQuery[1];
答案 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