Как я могу извлечь путь из большой строки, используя JAVA? - PullRequest
0 голосов
/ 28 октября 2019

Не удалось найти шаблон (алгоритм) для извлечения пути к файлу из длинной строки этого типа.

"List<Person>newPersonList = new PersonUtility().getAllPerson(\"C://data//person.txt\");"

Мне нужен только путь:

C://data//person.txt

Ответы [ 2 ]

1 голос
/ 28 октября 2019

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

String str = "ListnewPersonList = new PersonUtility().getAllPerson (\"C://data//person.txt\")";
Matcher m = Pattern.compile("\\w://[^\"]+").matcher(str);
while(m.find()) {
    System.out.println(m.group());
}

Вывод:

C://data//person.txt
0 голосов
/ 28 октября 2019

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

Как правило, имена классов следует начинать с заглавной буквы, а переменные с строчной буквы.

Но давайте предположим, что вы правы, и где-то еще мы объявили

String ListNewPersonList ...

Хорошо, у вас есть строка. У Java есть целый ряд методов, которые были добавлены в String для манипулирования ею - вплоть до регулярных выражений (то, что делает Perl тикать).

То, что вы можете искать, выглядит примерно так:

int x = ListNewPersonList.indexOf("C://");

например, найдите подстроку, которую вы вряд ли найдете в тексте.

Тогда все, что вам нужно, это конечный индекс, и вы можете сделать что-то вроде:

 String theFileNameToLookFor = ListNewPersonList.substring(x, y);

Или, может быть, y-1, в зависимости.

Будьте очень осторожны со строковыми границами, потому что базовая реализация по умолчанию рассматривает их как массив, и вы не хотитепопытаться проиндексировать часть массива, который на самом деле не существует. Java не понравится, если вы сделаете это.

Но вот в чем проблема - если вы точно не знаете, какой именно конец файла вам нужен (в данном случае «.txt»), который вы наполнили, потому чтоВы не можете точно сказать, как долго будут длиться имена каталогов.

В полном виде ответ может выглядеть примерно так:

  String answer = ListNewPersonList.substring(
                       ListNewPersonList.indexOf("C://"),
                       ListNewPersonList.indexOf(".txt"));

Конечно, это довольно опасно, если выслучается, что .txt, который происходит до первого C: //

Такова жизнь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...