2012-08-05 139 views
1

说我有它包含了如下文件:正则表达式 - 解析字符串

Hayden 
y 

假设我想操纵仅包含“Y”,而不是一个与海登行,我如何做到这一点?

所以我读的文件中,并逐行解析它。我想说如果该行在“y”之前或之后包含字母,那么它不是我要查找的行。

我想我可以做到以下几点:

String value = "y"; 
if(strLine.matches("[a-zA-Z]" + value + "[a-zA-Z]")) 
{ 
     don't manipulate line here 
} 
else 
{ 
    manipulate string here 
} 

然而,这种被 “海登” 以及 “Y”

任何想法?

编辑

对不起,我本来应该更清晰,如果我要是前面有空格或符号不介意?还是落后?它特别是我需要留意的字母。举例来说,我不能拥有YH,但我可以有Y = ...对不起再次

回答

1

也许这是你在找什么

String[] lines={"Hayden","y"," y*","y=","y+"," +y..."}; 
for (String s:lines) 
    System.out.println(s+"->"+s.matches("\\W*y\\W*")); 

输出:

Hayden->false 
y->true 
y*->true 
y=->true 
y+->true 
+y...->true 
+0

嗯,但有什么像y =或y +或+ y ...我认为这会失败,但这些线对我来说是好的。这只是如果有一个字母直接在Y旁边 - 在任何一方,我想避免.. – BigBug 2012-08-05 23:01:40

+0

@BlueMonster检查我的编辑,看看是否可以 – Pshemo 2012-08-05 23:06:00

+0

谢谢:)这实际上工作。很酷的东西人。再次感谢 – BigBug 2012-08-05 23:13:48

4

您可以使用排除lookarounds

if (strLine.matches("^.*(?<![a-zA-Z])y(?![a-zA-Z]).*$")) { 
    // manipulate string here 
} 

锚是可选的,但包括反正清晰。

+0

这可能是e显示asiest方式,如果行仅包含Y(你也可以使用“equalsIgnoreCase()” – DMor 2012-08-05 22:46:06

+0

对不起,我本来应该更清晰,如果我要是有符号不介意吗?或前面的空间? – BigBug 2012-08-05 22:47:53

+0

这几乎可以工作...但由于某种原因,它不捕捉y = y + y ... hwo我会解决这个问题吗?正如我所说,我不介意有符号或空格...只是旁边不能有字母..感谢btw – BigBug 2012-08-05 22:56:06

3

您可以使用:

strLine.matches("^y$") 

要忽略的符号,即非字母数字字符,请使用:

strLine.matches("^\\W*y\\W*$") 
+0

对不起,我应该已经更清楚了,如果我不介意前面有空格或符号怎么办?还是落后?它特别是我需要留意的字母。例如,我不能有啊,但我可以有y = ...再次抱歉 – BigBug 2012-08-05 22:48:47

+0

好吧,已添加一个新的表达 – Reimeus 2012-08-05 22:52:23

+0

谢谢这几乎是我一直在寻找+1 – BigBug 2012-08-05 23:18:20

0

如果你要使用正则表达式,你需要更具体一点:

  • y匹配y在该行的任何地方。
  • ^y$匹配的y这是正确的字符串(插入符号)开始后的字符串(美元符号)和右结束之前。这可以让你匹配等于y的行。
0

扩展了equals方法:只需删除所有你不介意的字符,然后检查与"y"

if (strLine.replaceAll("[^a-zA-Z]", "").equals("y")) { 
    ... 
} 
+0

我不能删除我不想要的信件......他们必须呆在那里......我只需要解决他们......因为我不想操纵那些行... – BigBug 2012-08-05 23:00:31

+0

replace()不处理任何东西,它返回一个新的字符串。条件是阅读“如果我要拿出所有不是aZ的东西,其余的只是一个”y“,那么......” – Bergi 2012-08-05 23:03:42

+0

但我不想对包含其他字母的行做任何事情....只有当这行包含我要查找的字母和符号或空格...在这种情况下,我想操纵字符串。但是,如果我删除所有内容,然后检查是否有“y”,我如何确定这是或不是只包含我要查找的字母和符号(如果有的话)的行 - 虽然并不一定有成为任何符号... – BigBug 2012-08-05 23:13:16