В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Вот то, как сделать это с # и операторами % в Bash.
$ x="/foo/fizzbuzz.bar"
$ y=${x%.bar}
$ echo ${y##*/}
fizzbuzz
${x%.bar}
мог также быть ${x%.*}
для удаления всего после точки или ${x%%.*}
для удаления всего после первой точки.
Пример:
$ x="/foo/fizzbuzz.bar.quux"
$ y=${x%.*}
$ echo $y
/foo/fizzbuzz.bar
$ y=${x%%.*}
$ echo $y
/foo/fizzbuzz
Документация может быть найдена в руководство Bash. Ищите ${parameter%word}
и ${parameter%%word}
запаздывающий раздел соответствия части.
посмотрите на команду базового имени:
NAME=$(basename /foo/fizzbuzz.bar .bar)
Чистый удар путь:
~$ x="/foo/bar/fizzbuzz.bar.quux.zoom";
~$ y=${x/\/*\//};
~$ echo ${y/.*/};
fizzbuzz
Эта функциональность объяснена на ударе человека при "Расширении Параметра". Не колотят пути, имейтесь в большом количестве: awk, жемчуг, sed и так далее.
РЕДАКТИРОВАНИЕ: Работы с точками в суффиксах файла и не должны знать суффикс (расширение), но работа doesn’t с точками в имя само.
Базовое имя и функции dirname - то, что Вы после:
mystring=/foo/fizzbuzz.bar
echo basename: $(basename "${mystring}")
echo basename + remove .bar: $(basename "${mystring}" .bar)
echo dirname: $(dirname "${mystring}")
произвел:
basename: fizzbuzz.bar
basename + remove .bar: fizzbuzz
dirname: /foo
Если Вы не можете использовать базовое имя, как предложено в других сообщениях, можно всегда использовать sed. Вот (ужасный) пример. Это не является самым большим, но это работает путем извлечения требуемой строки и замены входа требуемой строкой.
echo '/foo/fizzbuzz.bar' | sed 's|.*\/\([^\.]*\)\(\..*\)$|\1|g'
, Который получит Вас вывод
fizzbuzz
Используя basename
предполагает, что Вы знаете, каково расширение файла, не так ли?
И я полагаю, что различные предложения регулярного выражения не справляются с именем файла, содержащим больше чем один
, следующее, кажется, справляется с двойными точками. О, и имена файлов, которые содержат "/" сами (только для ударов)
Для перефразирования Паскаля, "Извините этот сценарий является таким длинным. У меня не было времени для создания его короче"
#!/usr/bin/perl
$fullname = $ARGV[0];
($path,$name) = $fullname =~ /^(.*[^\\]\/)*(.*)$/;
($basename,$extension) = $name =~ /^(.*)(\.[^.]*)$/;
print $basename . "\n";
Базовое имя делает это, удаляет путь. Это также удалит суффикс, если дали и если бы это соответствует суффиксу файла, но необходимо было бы знать, что суффикс дает команде. Иначе можно использовать mv и выяснить то, что новое имя должно быть некоторым другим путем.
Остерегайтесь предлагаемого решения perl: оно удаляет все, что находится после первой точки.
$ echo some.file.with.dots | perl -pe 's/\..*$//;s{^.*/}{}'
some
Если вы хотите сделать это с помощью perl, это сработает:
$ echo some.file.with.dots | perl -pe 's/(.*)\..*$/$1/;s{^.*/}{}'
some.file.with
Но если вы используете Bash, решения с y = $ {x%. *}
(или basename " $ x ".ext
, если вы знаете расширение) намного проще.