假设我有一个包含以下行的文件:
Hayden
y
假设我想操纵只包含“y”而不是Hayden的那条线,我该怎么做?
所以我在文件中读到并逐行解析。我想说如果该行包含“y”之前或之后的字母,那么它不是我正在寻找的行。
我以为我可以做到以下几点:
String value = "y";
if(strLine.matches("[a-zA-Z]" + value + "[a-zA-Z]"))
{
don't manipulate line here
}
else
{
manipulate string here
}
但是,这会得到“海登”以及“y”
有什么想法吗?
修改
抱歉,我应该更清楚,如果我不介意前面是否有空格或符号怎么办?还是落后?它特别是我需要注意的字母。例如,我不能拥有,但我可以拥有y = ......再次抱歉答案 0 :(得分:4)
您可以使用否定lookarounds:
if (strLine.matches("^.*(?<![a-zA-Z])y(?![a-zA-Z]).*$")) {
// manipulate string here
}
锚是可选的,但为了清楚起见,包括在内。
答案 1 :(得分:3)
您可以使用:
strLine.matches("^y$")
要忽略符号,即非字母数字字符,请使用:
strLine.matches("^\\W*y\\W*$")
答案 2 :(得分: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
答案 3 :(得分:0)
如果你打算使用正则表达式,你需要更具体一点:
y
匹配该行中任意位置的y
。^y$
匹配字符串结尾(美元符号)之前和字符串开头(插入符号)之后的y
。这使您可以将相等的行与y
匹配。答案 4 :(得分:0)
扩展平等方法:只需删除您不介意的所有字符,然后检查"y"
的相等性:
if (strLine.replaceAll("[^a-zA-Z]", "").equals("y")) {
...
}