2016-09-26 84 views
0

我已經給了一個條件像下面這能不能夠像from table1;insert into table1(col1,col2 ..)如何在具有直接特殊字符的行中匹配字符串?

if(Arrays.asList(line.split("\"")).contains("table1")) || 
     Arrays.asList(line.split(" ")).contains("table1")) 
    System.out.println(line); 

其中的邏輯我需要遵循匹配行?

+0

這取決於你想得到什麼結果。 – RealSkeptic

+0

我想查找確切的字符串\ btable1 \ b並排除「table1id」類型的字符串。我也想捕獲像我在table1描述的**中描述的那些行; **或者**插入到table1(col1,col2 ..)** – Jagadeeswar

+1

所以你知道'\ b'是什麼,這意味着你應該知道這可以用簡單的正則表達式來完成,而不是分裂。你爲什麼不嘗試匹配你給出的正則表達式('\ btable1 \ b')? – RealSkeptic

回答

0

使用正則表達式匹配如下

if(Arrays.asList(line.split("[\", .]").contains("table1")) 

請注意,你可以把你想對在方括號分割線的任何字符。

0

試試這個:

if (Arrays.asList(list.split("[^a-zA-Z0-9_]")).contains("table1")) { 
     System.out.println(list); 
} 

或者作爲RealSkeptic建議使用正則表達式匹配:

if (list.matches(".*\\btable1\\b.*")) { 
     System.out.println(list); 
} 
0

您可以使用正則表達式:

Pattern pat = Pattern.compile("(?<!\\p{L})table1(?!\\p{L})"); 
    if (pat.matcher(line).find()) 
    { 
     System.out.println(line); 
    } 
0

如果我正確地理解你的問題,你無需使用Splits即可實現:

String stringPattern = ".*table1.*"; 
Pattern pattern = Pattern.compile(stringPattern); 
Matcher matcher = pattern.matcher(line); 
if (matcher.matches()) 
    System.out.println(line); 
0

您可以使用正則表達式負lookahed和負回顧後:

String input = "from table1;"; 
Pattern p = Pattern.compile("(?<![a-zA-Z0-9_])table1(?![a-zA-Z0-9_])"); 
Matcher matcher = p.matcher(input); 

if (matcher.find()) 
    System.out.println(input); 

這將匹配任何"table1" OCCURENCES它不受任何字母,數字或符號_之前或之後。

1

使用正則表達式並將需要分割的所有特殊字符放入該表達式中。

if(Arrays.asList(line.split("[\",\s\.]").contains("table1")) 
相關問題