2016-03-01 36 views
1

后,我有一个字符串,我需要拆分的Java分割字符串,只有把一切都一个特定的词

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

我需要拆分它,只保留“从....”及以后。现在我有这个,但我认为它实际上将摆脱FROM字符串也正确?

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

你不能使用'indexOf'和'substring'? – Berger

+1

为什么你不只是得到FROM的索引,然后采取子字符串? – RE350

+0

试试https://regex101.com/r/nM2hE9/2 – Shafizadeh

回答

1

为什么你需要这样的regex

没有正则表达式

溶胶1

添加到您的代码

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

溶胶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)); 
} 
+0

谢谢,刚使用过的解决方案1 – Buccaneer

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方法从该点

除了字符串的长度。

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ž