Dart语言的pathinfo方法等效项

ppcbkaq5  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(94)

在PHP中有一个pathinfo函数,它允许例如获取路径中的文件名

$filename = pathinfo('/some/path/filename.txt', PATHINFO_BASENAME),
// $filename = 'filename.txt'

我想知道dart中是否有类似的功能。
因为现在我唯一能想到的办法就是:

  • 使用正则表达式
  • 使用'/some/path/filename.txt'.split('/')并获取最后一个元素

编辑

我问这个问题,因为我将不得不得到一堆路径(数千)的文件名,我正在寻找最有效的方法。

h6my8fg2

h6my8fg21#

为了获得从Dart中的路径提取文件名的最佳性能,您可以使用built-in String methods

void main() {
  const int iterations = 1000000;

  String filePath = '/some/path/filename.txt';

  // Method 1: Using Uri.pathSegments
  Stopwatch stopwatch1 = Stopwatch()..start();
  for (int i = 0; i < iterations; i++) {
    Uri.parse(filePath).pathSegments.last;
  }
  stopwatch1.stop();
  print('Method 1: ${stopwatch1.elapsedMilliseconds} ms');

  // Method 2: Using string methods
  Stopwatch stopwatch2 = Stopwatch()..start();
  for (int i = 0; i < iterations; i++) {
    filePath.substring(filePath.lastIndexOf('/') + 1);
  }
  stopwatch2.stop();
  print('Method 2: ${stopwatch2.elapsedMilliseconds} ms');

  // Method 3: Using List.last and string split
  Stopwatch stopwatch3 = Stopwatch()..start();
  for (int i = 0; i < iterations; i++) {
    filePath.split('/').last;
  }
  stopwatch3.stop();
  print('Method 3: ${stopwatch3.elapsedMilliseconds} ms');

  // Method 4: Using regular expressions
  Stopwatch stopwatch4 = Stopwatch()..start();
  for (int i = 0; i < iterations; i++) {
    RegExp regExp = RegExp(r'[^/]*$');
    regExp.stringMatch(filePath)!;
  }
  stopwatch4.stop();
  print('Method 4: ${stopwatch4.elapsedMilliseconds} ms');
}

输出:

Method 1: 1386 ms
Method 2: 35 ms
Method 3: 95 ms
Method 4: 256 ms

相关问题