扩展的正则表达式

时间:2016-05-27 18:57:37

标签: java android regex

我想知道文件是否只使用REGEX扩展。实施例

  • Hello.jpg(ok)
  • Goodbye.mp4(ok)

  • Free.xlsx(ok)

  • GettingStarted(NO)

  • File.81723.domain.8080.pdf(ok)

我如何在Android中执行此操作?

我试过这个但是没有工作

if(!fileName.matches("(\\.[^\\\\]+)$"))

4 个答案:

答案 0 :(得分:2)

您需要在开头使用.*,因为matches需要完整的字符串匹配,否定的字符类应该是[^.]来匹配任何字符,但文字{{1} }}

使用

.

请参阅regex demo

Java demo

if(!fileName.matches(".*\\.[^.]+")) ....

答案 1 :(得分:0)

@CommonsWare告诉我解决方案,它是:

favorites set<text>

然后你得到:

String[] tokens = fileName.split("\\.(?=[^\\.]+$)");

收率:

"test.cool.awesome.txt".split("\\.(?=[^\\.]+$)");

答案 2 :(得分:0)

System.out.println("yourFileName.txt".split("\\.(?=[^\\.]+$)").length >1 ? "OK":"NO");

其中,yourFileName.txt:您的文件名。

split(&#34; \。(?= [^ \。] + $)&#34;):从最后一个点拆分文件名。

如果数组大小大于1,则它具有扩展名,否则不具有。

答案 3 :(得分:0)

对于像检测字符串中是否有点这样简单的事情,您不必使用正则表达式。 String API提供了lastIndexOf(int)方法:

  

lastIndexOf(int ch)

     

返回指定字符最后一次出现的字符串中的索引。

如果您查看方法文档,您会注意到:

  

(...)如果此字符串中没有出现此类字符,则返回-1。   从最后一个字符开始向后搜索字符串。

基本上,您所要做的就是检查此方法是否返回大于-1的值,并且它不是最后一个字符。例如:

public static boolean hasExtension(final String fileName) {
    final int indexOfDot = fileName.indexOf('.');
    // Checking if dot index is greater than 0 - omitting
    // names without dot or starting with a dot.
    return indexOfDot > 0 && indexOfDot < fileName.length() - 1;
}

public static String getExtension(final String fileName) {
    return hasExtension(fileName) ?
         // +1 in substring to strip the dot.
         fileName.substring(fileName.lastIndexOf('.') + 1)
         // Returning empty string if no extension.
         : "";
}

"file.pdf"将报告为具有附加信息并返回pdf"file"".file""file."将报告为无扩展名。