Как разобрать эту строку в Java? - PullRequest
18 голосов
/ 04 июня 2009

префикс / dir1 / dir2 / dir3 / dir4 /..

Как разобрать значения dir1, dir2 из приведенной выше строки в Java?

Префикс здесь может быть:

/ USR / местные / apache2 / резюме

Ответы [ 10 ]

53 голосов
/ 04 июня 2009

Если вы хотите разделить String на символ /, будет работать метод String.split:

Например:

String s = "prefix/dir1/dir2/dir3/dir4";
String[] tokens = s.split("/");

for (String t : tokens)
  System.out.println(t);

выход

prefix
dir1
dir2
dir3
dir4

Редактировать

Случай с / в префиксе, и мы знаем, что это за префикс:

String s = "slash/prefix/dir1/dir2/dir3/dir4";

String prefix = "slash/prefix/";
String noPrefixStr = s.substring(s.indexOf(prefix) + prefix.length());

String[] tokens = noPrefixStr.split("/");

for (String t : tokens)
  System.out.println(t);

Подстрока без префикса "slash/prefix/" создается методом substring. Затем String проходит через split.

Выход:

dir1
dir2
dir3
dir4

Изменить еще раз

Если это String на самом деле имеет дело с путями к файлам, использование класса File, вероятно, предпочтительнее, чем использование строковых операций. Такие классы, как File, которые уже учитывают все тонкости работы с путями к файлам, будут более устойчивыми.

2 голосов
/ 04 июня 2009
...
String str = "bla!/bla/bla/"

String parts[] = str.split("/");

//To get fist "bla!"
String dir1 = parts[0];
2 голосов
/ 04 июня 2009

В таком случае, почему бы не использовать new File("prefix/dir1/dir2/dir3/dir4") и перейти оттуда?

1 голос
/ 07 октября 2012
 String result;
 String str = "/usr/local/apache2/resumes/dir1/dir2/dir3/dir4";
 String regex ="(dir)+[\\d]";
 Matcher matcher = Pattern.compile( regex ).matcher( str);
  while (matcher.find( ))
  {
  result = matcher.group();     
  System.out.println(result);                 
}

output-- dir1 dir2 dir3 dir4

1 голос
/ 04 июня 2009
String str = "/usr/local/apache/resumes/dir1/dir2";
String prefix = "/usr/local/apache/resumes/";

if( str.startsWith(prefix) ) {
  str = str.substring(0, prefix.length);
  String parts[] = str.split("/");
  // dir1=parts[0];
  // dir2=parts[1];
} else {
  // It doesn't start with your prefix
}
0 голосов
/ 15 мая 2016

Использование метода String.split, безусловно, будет работать, как сказано в других ответах здесь.

Кроме того, класс StringTokenizer можно использовать для анализа строки, используя / в качестве разделителя.

import java.util.StringTokenizer;
public class Test
{
    public static void main(String []args)
    {
        String s = "prefix/dir1/dir2/dir3/dir4/..";
        StringTokenizer tokenizer = new StringTokenizer(s, "/");
        String dir1 = tokenizer.nextToken();
        String dir2 = tokenizer.nextToken();
        System.out.println("Dir 1  : "+dir1);
        System.out.println("Dir 2 : " + dir2);
    }
}

Дает вывод как:

Dir 1  : prefix
Dir 2 : dir1

Здесь вы можете найти больше информации о StringTokenizer .

0 голосов
/ 04 июня 2009

String.split (String regex) удобен, но если вам не нужна обработка регулярных выражений, то используйте пример substring (..), java.util.StringTokenizer или используйте Apache commons lang 1 . Разница в производительности при отсутствии регулярных выражений может увеличиваться на 1–2 порядка по скорости.

0 голосов
/ 04 июня 2009

Если это Файл, вы можете получить детали, создав экземпляр File, а затем запросить его сегменты.

Это хорошо, потому что это будет работать независимо от направления слеша; он не зависит от платформы (кроме «букв дисков» в Windows ...)

0 голосов
/ 04 июня 2009
public class Test {
    public static void main(String args[]) {
    String s = "pre/fix/dir1/dir2/dir3/dir4/..";
    String prefix = "pre/fix";
    String[] tokens = s.substring(prefix.length()).split("/");
    for (int i=0; i<tokens.length; i++) {
        System.out.println(tokens[i]);
    }
    }

}
0 голосов
/ 04 июня 2009
String s = "prefix/dir1/dir2/dir3/dir4"

String parts[] = s.split("/");

System.out.println(s[0]); // "prefix"
System.out.println(s[1]); // "dir1"
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...