正则表达式 - 解析字符串
说我有它包含了如下文件:正则表达式 - 解析字符串
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 = ...对不起再次
也许这是你在找什么
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
您可以使用排除lookarounds:
if (strLine.matches("^.*(?<![a-zA-Z])y(?![a-zA-Z]).*$")) {
// manipulate string here
}
锚是可选的,但包括反正清晰。
如果你要使用正则表达式,你需要更具体一点:
-
y
匹配y
在该行的任何地方。 -
^y$
匹配的y
这是正确的字符串(插入符号)开始后的字符串(美元符号)和右结束之前。这可以让你匹配等于到y
的行。
扩展了equals方法:只需删除所有你不介意的字符,然后检查与"y"
:
if (strLine.replaceAll("[^a-zA-Z]", "").equals("y")) {
...
}
我不能删除我不想要的信件......他们必须呆在那里......我只需要解决他们......因为我不想操纵那些行... – BigBug 2012-08-05 23:00:31
replace()不处理任何东西,它返回一个新的字符串。条件是阅读“如果我要拿出所有不是aZ的东西,其余的只是一个”y“,那么......” – Bergi 2012-08-05 23:03:42
但我不想对包含其他字母的行做任何事情....只有当这行包含我要查找的字母和符号或空格...在这种情况下,我想操纵字符串。但是,如果我删除所有内容,然后检查是否有“y”,我如何确定这是或不是只包含我要查找的字母和符号(如果有的话)的行 - 虽然并不一定有成为任何符号... – BigBug 2012-08-05 23:13:16
嗯,但有什么像y =或y +或+ y ...我认为这会失败,但这些线对我来说是好的。这只是如果有一个字母直接在Y旁边 - 在任何一方,我想避免.. – BigBug 2012-08-05 23:01:40
@BlueMonster检查我的编辑,看看是否可以 – Pshemo 2012-08-05 23:06:00
谢谢:)这实际上工作。很酷的东西人。再次感谢 – BigBug 2012-08-05 23:13:48