2016-09-26 40 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")) 
相关问题