Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在某个字符的最后一次出现时拆分字符串_Java_Android_Regex_String - Fatal编程技术网

Java 在某个字符的最后一次出现时拆分字符串

Java 在某个字符的最后一次出现时拆分字符串,java,android,regex,string,Java,Android,Regex,String,我基本上是在最后一个句点上拆分一个字符串来捕获文件扩展名。但有时文件没有任何扩展名,所以我希望如此 但问题是有些文件名在结尾之前有句点,就像这样 /mnt/sdcard/OG Ron C, Chopstars & Drake - Choppin Ain't The Same-2013-MIXFIEND/02 Drake - Connect (Feat. Fat Pat) (Chopped Not Slopped).mp3 因此,当这个字符串出现时,它会在“02德雷克连接(专长)”处将其

我基本上是在最后一个句点上拆分一个字符串来捕获文件扩展名。但有时文件没有任何扩展名,所以我希望如此

但问题是有些文件名在结尾之前有句点,就像这样

/mnt/sdcard/OG Ron C, Chopstars & Drake - Choppin Ain't The Same-2013-MIXFIEND/02 Drake - Connect (Feat. Fat Pat) (Chopped Not Slopped).mp3
因此,当这个字符串出现时,它会在“02德雷克连接(专长)”处将其切碎

这就是我一直在用的

String filePath = intent.getStringExtra(ARG_FILE_PATH);
String fileType = filePath.substring(filePath.length() - 4);
String FileExt = null;
try {
    StringTokenizer tokens = new StringTokenizer(filePath, ".");
    String first = tokens.nextToken();
    FileExt = tokens.nextToken();
}
catch(NoSuchElementException e) {
    customToast("the scene you chose, has no extension :(");
}
System.out.println("EXT " + FileExt);
File fileToUpload = new File(filePath);

如何在文件扩展名处拆分字符串,但也能够在文件没有扩展名时处理和发出警报。

如何使用句点作为分隔符拆分filPath。并获取该数组中的最后一项以获取扩展名:

        String fileTypeArray[] = filePath.split(",");
        String fileType = "";
        if(fileTypeArray != null && fileTypeArray.length > 0) {
          fileType = fileTypeArray[fileTypeArray.length - 1];
        }
你可以试试这个

int i = s.lastIndexOf(c);
String[] a =  {s.substring(0, i), s.substring(i)};

假设以点结尾并后跟字母数字字符的文件具有扩展名可能更容易

int p=filePath.lastIndexOf(".");
String e=filePath.substring(p+1);
if( p==-1 || !e.matches("\\w+") ){/* file has no extension */}
else{ /* file has extension e */ }

有关正则表达式模式,请参阅。请记住转义反斜杠,因为模式字符串需要反斜杠。

这是Java吗?如果是,为什么不使用“Java.io.File.getName”

例如:

File f = new File("/aaa/bbb/ccc.txt");
System.out.println(f.getName());
输出:

您可以在正则表达式中使用,以确保它仅在最后一次出现时分割。正向前瞻确保它仅在以后未在字符串中看到另一次出现时分割

//使用问题中的示例文件路径
String filePath=“/mnt/sdcard/OG Ron C,Chopstars和Drake-chopin不一样-2013-MIXFIEND/02 Drake-Connect(Feat.Fat Pat)(切碎而不是sloped).mp3”;
String[]parts=filePath.split(“\\(?=[^.]*$”);
//零件=[
//“/mnt/sdcard/OG Ron C,Chopstars和Drake-chopin不一样-2013-mixfeend/02 Drake-Connect(壮举胖拍)(切碎而不倾斜)”
//“mp3”
// ]
分解正则表达式:

  • \\.
    -查找句点
  • (?=[^.]*$)
    -确保之后的所有内容都是而不是一个时段,但不包括在匹配中)

考虑使用
lastIndexOf()
,并使用一些启发式方法来检测它何时表示“扩展”以及当它是文件名的一部分时。请参阅为什么不反转字符串并在“.”之前取第一个子字符串?此链接可能有助于您使用元字符查找单词字符。请注意,如果文件名以点开头且没有扩展名(例如
.gitignore
),则此操作将失败,这在基于POSIX的系统上非常常见。可以通过更改
if
条件来检查
p
是否小于或等于零来解决此问题。请注意,这会将拆分字符保留在最后一个字符串部分的开头。构建文件对象的成本太高,无法仅解析同名@jasmete?文件除了解析名称外,不会在封面下做任何事情;您可能会调用一些方法,这些方法可能很昂贵,但构造函数非常便宜。这应该是公认的答案。您还可以调用f.getParent()来获取路径部分。
ccc.txt