Разделение строки в java на основе пользовательской логики

#java

Вопрос:

У меня есть веревочка

 "target/abcd12345671.csv"
 

и мне нужно извлечь

 "abcd12345671"
 

из строки с использованием Java. Может ли кто-нибудь предложить мне чистый способ извлечь это.

Комментарии:

1. разделиться на / и . !?

2. Путь.Имя файла() ?

Ответ №1:

Ядро Java

 String fileName = Paths.get("target/abcd12345671.csv").getFileName().toString();
fileName = filename.replaceFirst("[.][^.] $", "")
 

Использование общего доступа apache

 import org.apache.commons.io.FilenameUtils;
String fileName = Paths.get("target/abcd12345671.csv").getFileName().toString();
String fileNameWithoutExt = FilenameUtils.getBaseName(fileName);
 

Ответ №2:

Мне нравится подход замены регулярных выражений здесь:

 String filename = "target/abcd12345671.csv";
String output = filename.replaceAll("^.*/|\..*$", "");
System.out.println(output);  // abcd12345671
 

Здесь мы используем чередование регулярных выражений, чтобы удалить все содержимое, включая последнюю косую черту, а также все содержимое от точки в расширении до конца имени файла. Это оставляет после себя контент, который вам действительно нужен.

Ответ №3:

Вот подход с использованием регулярного выражения

 String filename = "target/abcd12345671.csv";

var pattern = Pattern.compile("target/(.*).csv");
var matcher = pattern.matcher(filename);
if (matcher.find()) {
    // Whole matched expression -> "target/abcd12345671.csv"
    System.out.println(matcher.group(0));
    // Matched in the first group -> in regex it is the (.*) expression
    System.out.println(matcher.group(1));
}