在最后一次出现的字符上拆分字符串

sir*_*von 29 java regex string android

我基本上试图在最后一个时间段溢出一个字符串来捕获文件扩展名.但有时文件没有扩展,所以我期待.但问题是有些文件名在结束前有句号,所以...

/mnt/sdcard/OG Ron C, Chopstars & Drake - Choppin Ain't The Same-2013-MIXFIEND/02 Drake - Connect (Feat. Fat Pat) (Chopped Not Slopped).mp3
Run Code Online (Sandbox Code Playgroud)

所以当这个字符串出现时,它会在"02 Drake - Connect(Feat.")上剁它.

这就是我一直在使用的......

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);
Run Code Online (Sandbox Code Playgroud)

如何在文件扩展名处拆分字符串,但是当文件没有扩展名时,也能够处理和警告.

Evg*_*eev 41

你可以试试这个

int i = s.lastIndexOf(c);
String[] a =  {s.substring(0, i), s.substring(i)};
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这会在最后一个字符串部分的开头留下拆分字符. (8认同)
  • 事实上,答案应该是:`int i = s.lastIndexOf(c); String[] a = {s.substring(0, i), s.substring(i+1)};` (6认同)

use*_*366 28

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

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 */ }
Run Code Online (Sandbox Code Playgroud)

有关正则表达式模式,请参阅Java文档.记住要逃避反斜杠,因为模式字符串需要反斜杠.


Kei*_*awa 6

这是Java吗?如果是这样,为什么不使用"java.io.File.getName".

例如:

File f = new File("/aaa/bbb/ccc.txt");
System.out.println(f.getName());
Run Code Online (Sandbox Code Playgroud)

日期:

ccc.txt
Run Code Online (Sandbox Code Playgroud)

  • 为了解析名称而构建File对象太昂贵了 (3认同)