我想跳过包含任何办公室文件格式的网址或网址末尾的pdf,这是我的代码。
String Url ="http://chemistry.csudh.edu/faculty/jim/aromaticity.ppt";
if (!Url.matches(".*(doc|dot|docx|docm|dotx|dotm)")
|| !Url.matches(".*ppt|pot|pps")
|| !Url.matches(".*xls|xlt|xlm")
|| !Url.matches(".*pdf"))
System.out.print(Url);
else
System.out.print("true");
我想知道这个代码片段有什么问题,因为它每次打印url但我想跳过包含上述任何格式的url。
答案 0 :(得分:2)
您缺少第二个和第三个正则表达式中的括号。 !Url.matches(".*ppt|pot|pps")
将匹配所有未以ppt
结尾的网址,但abc.pot
之类的网址将不会与该正则表达式匹配,条件将为true
。你应该把它改成:
!Url.matches(".*(ppt|pot|pps)")
..和第一个正则表达式一样。此外,您的情况应该是&&
而不是||
。
matches()
调用?这将需要编译4个不同的正则表达式,而你可以用一个正则表达式完成它。只需将所有扩展名添加到第一个正则表达式列表中:
if (!url.matches(".*(doc|dot|docx|docm|dotx|dotm|ppt|pot|pps|xls|xlt|xlm|pdf)")
P.S:请遵循Java命名约定。变量名称应以小写字母开头。
答案 1 :(得分:1)
这是logic
错误,您应将其更改为
String Url ="http://chemistry.csudh.edu/faculty/jim/aromaticity.ppt";
if (!Url.matches(".*(doc|dot|docx|docm|dotx|dotm)")
&& !Url.matches(".*ppt|pot|pps")
&& !Url.matches(".*xls|xlt|xlm")
&& !Url.matches(".*pdf"))
System.out.print(Url);
else
System.out.print("true");
答案 2 :(得分:1)
您的情况是否有问题,因为您使用的是||
而不是&&
。请考虑以下情况 - 以.pdf
结尾的网址不能以.doc
结尾,反之亦然 - 因此条件始终评估为true
。从逻辑上讲,您希望测试网址与任何文档格式不匹配 - 使用&&
推断:
String Url ="http://chemistry.csudh.edu/faculty/jim/aromaticity.ppt";
if (!Url.matches(".*(doc|dot|docx|docm|dotx|dotm)")
&& !Url.matches(".*ppt|pot|pps")
&& !Url.matches(".*xls|xlt|xlm")
&& !Url.matches(".*pdf"))
System.out.print(Url);
else {
System.out.print("true");
}