2012-05-11 2 views
2

мне было интересно, если есть какое-либо хорошее решение для следующей задачи:Удалить файл префикс в абсолютном пути, но префикс также каталог часть

Предполагая, что у меня есть строка с абсолютным путем к файлу и файл имеет префикс "temp_". Я могу обрезать префикс с помощью string.replaceFirst().

Но если мне не повезло, «temp_» также является частью каталога в этой строке. Как убедиться, что только последнее появление будет обрезано?

Я могу только подумать, чтобы разобрать его сам, но было интересно, есть ли волшебство, чтобы сделать это лучше?

Чтобы быть точнее, как, например:

C:\Dump\sol1\temp_results\temp_2012-04-core.pcap 

должны стать:

C:\Dump\sol1\temp_results\2012-04-core.pcap 

ответ

2

если у вас есть файл id defo, используйте подход @goldilocks. Но если по какой-то причине вы просто его как String, первое, что пришло мне в голову, это:

String target = "temp_"; 

    String fullPath = "C:/Dump/sol1/temp_results/temp_2012-04-core.pcap"; 

    StringBuffer sb = new StringBuffer(fullPath); 
    int end = fullPath.lastIndexOf(target) + target.length(); 

    System.out.println(sb.replace(fullPath.lastIndexOf(target), end, "")); 
+0

Я просто привел пример, чтобы сделать его более точно, надеюсь, что это немного яснее, что я говорил. – Stefan

+0

Решение @goldilocks - это то, как вам следует. Мой был первым, кто появился в моей голове. – buymypies

+0

, несмотря на то, что goldilocks истинно, если предположить, что у меня нет доступа к объекту File, это было бы очень хорошим способом, о котором я не думал, и заставляю меня принять в качестве ответа. В любом случае goldilocks также будет работать, если вы получили доступ к объекту File. – Stefan

3

Если вы используете Path.getFileName(), только базовое имя файла возвращается (то есть, она не включает в себя какой-либо родительский каталог). Вы можете сделать это с заменой и поместить его обратно, используя другие функции Path (см. getName(), subpath() и т. Д.) В любой другой путь или одну строку.

0

Это просто еще один пример того, как это сделать.

общая сумма строк на три части.

1.substring till temp_ last occurence 

2.last occuerence of temp_ 

3.substring after last occuerence of temp_ 

cancat 1 + 3 в любом случае я рекомендую @goldilocks Раствора