Как разбирать эту строку в Java?
Префикс/dir1/dir2/dir3/dir4/..
Как анализировать значения dir1, dir2
из указанной выше строки в Java?
Префикс здесь может быть:
/USR/локальные/apache2/резюме
Ответы
Ответ 1
Если вы хотите разделить 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
Edit
Случай с /
в префиксе, и мы знаем, что такое префикс:
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
В этом случае, почему бы не использовать new File("prefix/dir1/dir2/dir3/dir4")
и перейти оттуда?
Ответ 3
...
String str = "bla!/bla/bla/"
String parts[] = str.split("/");
//To get fist "bla!"
String dir1 = parts[0];
Ответ 4
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
}
Ответ 5
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
Ответ 6
Использование метода 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.
Ответ 7
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]);
}
}
}
Ответ 8
Если это файл, вы можете получить детали, создав экземпляр файла, а затем попросите его сегменты.
Это хорошо, потому что он будет работать независимо от направления косых черт; он независим от платформы (кроме "букв дисков" в окнах...)
Ответ 9
String.split(String regex) удобно, но если вам не нужна обработка регулярных выражений, тогда перейдите к примеру подстроки (..), java.util.StringTokenizer или используйте Apache commons lang 1. Разница в производительности при использовании регулярных выражений может быть усилением на 1-2 порядка по скорости.
Ответ 10
String s = "prefix/dir1/dir2/dir3/dir4"
String parts[] = s.split("/");
System.out.println(s[0]); // "prefix"
System.out.println(s[1]); // "dir1"
...