How about this?
// assuming the file extension is either 3 or 4 characters long public boolean hasFileExtension(String s) { return s.matches("^[\\w\\d\\:\\/\\.]+\\.\\w{3,4}(\\?[\\w\\W]*)?$"); } @Test public void testHasFileExtension() { assertTrue("3-character extension", hasFileExtension("http://www.yahoo.com/a.pdf")); assertTrue("3-character extension", hasFileExtension("http://www.yahoo.com/a.htm")); assertTrue("4-character extension", hasFileExtension("http://www.yahoo.com/a.html")); assertTrue("3-character extension with param", hasFileExtension("http://www.yahoo.com/a.pdf?p=1")); assertTrue("4-character extension with param", hasFileExtension("http://www.yahoo.com/a.html?p=1&p=2")); assertFalse("2-character extension", hasFileExtension("http://www.yahoo.com/a.co")); assertFalse("2-character extension with param", hasFileExtension("http://www.yahoo.com/a.co?p=1&p=2")); assertFalse("no extension", hasFileExtension("http://www.yahoo.com/hello")); assertFalse("no extension with param", hasFileExtension("http://www.yahoo.com/hello?p=1&p=2")); assertFalse("no extension with param ends with .htm", hasFileExtension("http://www.yahoo.com/hello?p=1&p=a.htm")); }
source share