2016-03-01 43 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ž