Новый тип bytes
имеет только 3.x . Встроенный 2.x bytes
является просто псевдонимом типа str
. В 2.x нет нового типа с именем bytes
; Просто новый псевдоним и буквальный синтаксис для str
.
Вот фрагмент документации , который всем нравится:
Python 2.6 добавляет
bytes
как синоним для типаstr
, а также поддерживаетb''
обозначения.2.6
str
отличается от типа байтов 3.0 различными способами; В частности, конструктор совершенно другой. В версии 3.0bytes([65, 66, 67])
имеет длину 3 элемента и содержит байты, представляющиеABC
; в 2.6bytes([65, 66, 67])
возвращает 12-байтовую строку, представляющуюstr()
списка.Основное использование
bytes
в 2.6 будет заключаться в написании тестов типа объекта, таких какisinstance(x, bytes)
. Это поможет конвертеру2to3
, который не может определить, содержит ли код 2.x строки, содержащие символы или 8-битные байты; Теперь вы можете использовать либоbytes
, либоstr
, чтобы точно представлять ваше намерение, и полученный код также будет корректным в Python 3.0.
Если вы хотите разделить строку 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);
Подстрока без префикса "косая черта / prefix / "
создается методом substring
. Эта Строка
затем проходит через разделение
.
Вывод:
dir1
dir2
dir3
dir4
Изменить снова
Если эта Строка
действительно имеет дело с путями к файлам, используя класс File
, вероятно, предпочтительнее, чем использование строковых манипуляций. Такие классы, как File
, которые уже учитывают все тонкости работы с путями к файлам, будут более надежными.
В этом случае, почему бы не использовать новый файл ("префикс / dir1 / dir2 / dir3 / dir4")
и перейти оттуда?
...
String str = "bla!/bla/bla/"
String parts[] = str.split("/");
//To get fist "bla!"
String dir1 = parts[0];
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 }
Если это файл, вы можете получить части, создав экземпляр File, а затем запросить его сегменты.
Это хорошо, потому что он будет работать независимо от направления косой черты. ; он не зависит от платформы (кроме "букв дисков" в Windows ...)
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]);
}
}
}
String.split (String regex) удобен, но если вам не нужна обработка регулярных выражений, используйте пример подстроки (..), java.util.StringTokenizer или используйте Apache Commons. lang 1 . Разница в производительности, когда не используются регулярные выражения, может привести к увеличению скорости на 1-2 порядка.
String s = "prefix/dir1/dir2/dir3/dir4"
String parts[] = s.split("/");
System.out.println(s[0]); // "prefix"
System.out.println(s[1]); // "dir1"
...