Как я обрезаю расширение файла от Строки в Java?

Вы можете использовать Json, чтобы получить всю информацию о видео

$jsonURL = file_get_contents("https://www.googleapis.com/youtube/v3/videos?id={Your_Video_ID_Here}&key={Your_API_KEY}8&part=snippet");
$json = json_decode($jsonURL);

$vtitle = $json->{'items'}[0]->{'snippet'}->{'title'};
$vdescription = $json->{'items'}[0]->{'snippet'}->{'description'};
$vvid = $json->{'items'}[0]->{'id'};
$vdate = $json->{'items'}[0]->{'snippet'}->{'publishedAt'};
$vthumb = $json->{'items'}[0]->{'snippet'}->{'thumbnails'}->{'high'}->{'url'};

Я надеюсь, что это решит вашу проблему.

169
задан Michael Myers 2 June 2009 в 19:02
поделиться

7 ответов

Я бы сделал следующее:

String title_part = "title part1.txt";
int i;
for(i=title_part.length()-1 ; i>=0 && title_part.charAt(i)!='.' ; i--);
title_part = title_part.substring(0,i);

Начиная с конца до символа '.' затем вызвать подстроку.

Изменить: Может, не гольф, но действенно :)

0
ответ дан 23 November 2019 в 20:48
поделиться
String fileName="foo.bar";
int dotIndex=fileName.lastIndexOf('.');
if(dotIndex>=0) { // to prevent exception if there is no dot
  fileName=fileName.substring(0,dotIndex);
}

Это вопрос с подвохом? : p

Я не могу придумать более быстрого банкомата.

6
ответ дан 23 November 2019 в 20:48
поделиться
String foo = "title part1.txt";
foo = foo.substring(0, foo.lastIndexOf('.'));
16
ответ дан 23 November 2019 в 20:48
поделиться
str.substring(0, str.lastIndexOf('.'))
222
ответ дан 23 November 2019 в 20:48
поделиться

Это тот код, который мы не должны делать сами. Используйте библиотеки для повседневных вещей, оставьте свой мозг для сложных вещей.

В этом случае я рекомендую использовать FilenameUtils.removeExtension () из Apache Commons IO

270
ответ дан 23 November 2019 в 20:48
поделиться

Поскольку использование String.substring и String.lastIndex в однострочном варианте - это хорошо, есть некоторые проблемы с точки зрения возможности справиться с определенными путями к файлам.

Возьмем, к примеру, следующий путь:

a.b/c

Использование однострочника приведет к:

a

Это неверно.

Результат должен был быть c , но поскольку у файла не было расширения, но в пути был каталог с . в названии однострочный метод был обманут, указав часть пути в качестве имени файла, что неверно.

Необходимость проверок

Вдохновленный ответом скаффмана , я взглянул в методе FilenameUtils.removeExtension Apache Commons IO .

Чтобы воссоздать его поведение, Я написал несколько тестов, которым должен соответствовать новый метод, а именно:

Path                  Filename
--------------        --------
a/b/c                 c
a/b/c.jpg             c
a/b/c.jpg.jpg         c.jpg

a.b/c                 c
a.b/c.jpg             c
a.b/c.jpg.jpg         c.jpg

c                     c
c.jpg                 c
c.jpg.jpg             c.jpg

(И это все, что я проверял - вероятно, должны быть другие проверки, которые я пропустил.)

Реализация

Ниже представлена ​​моя реализация метода removeExtension :

public static String removeExtension(String s) {

    String separator = System.getProperty("file.separator");
    String filename;

    // Remove the path upto the filename.
    int lastSeparatorIndex = s.lastIndexOf(separator);
    if (lastSeparatorIndex == -1) {
        filename = s;
    } else {
        filename = s.substring(lastSeparatorIndex + 1);
    }

    // Remove the extension.
    int extensionIndex = filename.lastIndexOf(".");
    if (extensionIndex == -1)
        return filename;

    return filename.substring(0, extensionIndex);
}

Выполнение этого метода removeExtension с вышеуказанными тестами дает результаты, перечисленные выше.

Метод был протестирован с помощью следующего кода. Поскольку это было запущено в Windows, разделителем пути является \ , который должен быть экранирован с помощью \ при использовании как часть литерала String .

System.out.println(removeExtension("a\\b\\c"));
System.out.println(removeExtension("a\\b\\c.jpg"));
System.out.println(removeExtension("a\\b\\c.jpg.jpg"));

System.out.println(removeExtension("a.b\\c"));
System.out.println(removeExtension("a.b\\c.jpg"));
System.out.println(removeExtension("a.b\\c.jpg.jpg"));

System.out.println(removeExtension("c"));
System.out.println(removeExtension("c.jpg"));
System.out.println(removeExtension("c.jpg.jpg"));

Были получены следующие результаты:

c
c
c.jpg
c
c
c.jpg
c
c
c.jpg

Результаты представляют собой желаемые результаты, указанные в тесте, которому должен соответствовать метод.

я проверил - вероятно, есть другие проверки, которые я пропустил.)

Реализация

Ниже представлена ​​моя реализация метода removeExtension :

public static String removeExtension(String s) {

    String separator = System.getProperty("file.separator");
    String filename;

    // Remove the path upto the filename.
    int lastSeparatorIndex = s.lastIndexOf(separator);
    if (lastSeparatorIndex == -1) {
        filename = s;
    } else {
        filename = s.substring(lastSeparatorIndex + 1);
    }

    // Remove the extension.
    int extensionIndex = filename.lastIndexOf(".");
    if (extensionIndex == -1)
        return filename;

    return filename.substring(0, extensionIndex);
}

Выполняется этот метод removeExtension с приведенными выше тестами дает результаты, перечисленные выше.

Метод был протестирован с помощью следующего кода. Поскольку это было запущено в Windows, разделителем пути является \ , который должен быть экранирован с помощью \ при использовании как часть литерала String .

System.out.println(removeExtension("a\\b\\c"));
System.out.println(removeExtension("a\\b\\c.jpg"));
System.out.println(removeExtension("a\\b\\c.jpg.jpg"));

System.out.println(removeExtension("a.b\\c"));
System.out.println(removeExtension("a.b\\c.jpg"));
System.out.println(removeExtension("a.b\\c.jpg.jpg"));

System.out.println(removeExtension("c"));
System.out.println(removeExtension("c.jpg"));
System.out.println(removeExtension("c.jpg.jpg"));

Были получены следующие результаты:

c
c
c.jpg
c
c
c.jpg
c
c
c.jpg

Результаты представляют собой желаемые результаты, указанные в тесте, которому должен соответствовать метод.

я проверил - вероятно, есть другие проверки, которые я пропустил.)

Реализация

Ниже представлена ​​моя реализация метода removeExtension :

public static String removeExtension(String s) {

    String separator = System.getProperty("file.separator");
    String filename;

    // Remove the path upto the filename.
    int lastSeparatorIndex = s.lastIndexOf(separator);
    if (lastSeparatorIndex == -1) {
        filename = s;
    } else {
        filename = s.substring(lastSeparatorIndex + 1);
    }

    // Remove the extension.
    int extensionIndex = filename.lastIndexOf(".");
    if (extensionIndex == -1)
        return filename;

    return filename.substring(0, extensionIndex);
}

Выполняется этот метод removeExtension с приведенными выше тестами дает результаты, перечисленные выше.

Метод был протестирован с помощью следующего кода. Поскольку это было запущено в Windows, разделителем пути является \ , который должен быть экранирован с помощью \ при использовании как часть литерала String .

System.out.println(removeExtension("a\\b\\c"));
System.out.println(removeExtension("a\\b\\c.jpg"));
System.out.println(removeExtension("a\\b\\c.jpg.jpg"));

System.out.println(removeExtension("a.b\\c"));
System.out.println(removeExtension("a.b\\c.jpg"));
System.out.println(removeExtension("a.b\\c.jpg.jpg"));

System.out.println(removeExtension("c"));
System.out.println(removeExtension("c.jpg"));
System.out.println(removeExtension("c.jpg.jpg"));

Были получены следующие результаты:

c
c
c.jpg
c
c
c.jpg
c
c
c.jpg

Результаты представляют собой желаемые результаты, указанные в тесте, которому должен соответствовать метод.

)

Реализация

Ниже представлена ​​моя реализация метода removeExtension :

public static String removeExtension(String s) {

    String separator = System.getProperty("file.separator");
    String filename;

    // Remove the path upto the filename.
    int lastSeparatorIndex = s.lastIndexOf(separator);
    if (lastSeparatorIndex == -1) {
        filename = s;
    } else {
        filename = s.substring(lastSeparatorIndex + 1);
    }

    // Remove the extension.
    int extensionIndex = filename.lastIndexOf(".");
    if (extensionIndex == -1)
        return filename;

    return filename.substring(0, extensionIndex);
}

Выполнение этого метода removeExtension с вышеуказанными тестами дает результаты, перечисленные выше.

Метод был протестирован с использованием следующего кода. Поскольку это было запущено в Windows, разделителем пути является \ , который должен быть экранирован с помощью \ при использовании как часть литерала String .

System.out.println(removeExtension("a\\b\\c"));
System.out.println(removeExtension("a\\b\\c.jpg"));
System.out.println(removeExtension("a\\b\\c.jpg.jpg"));

System.out.println(removeExtension("a.b\\c"));
System.out.println(removeExtension("a.b\\c.jpg"));
System.out.println(removeExtension("a.b\\c.jpg.jpg"));

System.out.println(removeExtension("c"));
System.out.println(removeExtension("c.jpg"));
System.out.println(removeExtension("c.jpg.jpg"));

Были получены следующие результаты:

c
c
c.jpg
c
c
c.jpg
c
c
c.jpg

Результаты представляют собой желаемые результаты, указанные в тесте, которому должен соответствовать метод.

)

Реализация

Ниже представлена ​​моя реализация метода removeExtension :

public static String removeExtension(String s) {

    String separator = System.getProperty("file.separator");
    String filename;

    // Remove the path upto the filename.
    int lastSeparatorIndex = s.lastIndexOf(separator);
    if (lastSeparatorIndex == -1) {
        filename = s;
    } else {
        filename = s.substring(lastSeparatorIndex + 1);
    }

    // Remove the extension.
    int extensionIndex = filename.lastIndexOf(".");
    if (extensionIndex == -1)
        return filename;

    return filename.substring(0, extensionIndex);
}

Выполнение этого метода removeExtension с вышеуказанными тестами дает результаты, перечисленные выше.

Метод был протестирован с использованием следующего кода. Поскольку это было запущено в Windows, разделителем пути является \ , который должен быть экранирован с помощью \ при использовании как часть литерала String .

System.out.println(removeExtension("a\\b\\c"));
System.out.println(removeExtension("a\\b\\c.jpg"));
System.out.println(removeExtension("a\\b\\c.jpg.jpg"));

System.out.println(removeExtension("a.b\\c"));
System.out.println(removeExtension("a.b\\c.jpg"));
System.out.println(removeExtension("a.b\\c.jpg.jpg"));

System.out.println(removeExtension("c"));
System.out.println(removeExtension("c.jpg"));
System.out.println(removeExtension("c.jpg.jpg"));

Были получены следующие результаты:

c
c
c.jpg
c
c
c.jpg
c
c
c.jpg

Результаты представляют собой желаемые результаты, указанные в тесте, которому должен соответствовать метод.

86
ответ дан 23 November 2019 в 20:48
поделиться

У меня есть веб-страница с парой многоагентных имитаций netlogo . Я использую netlogo для преподавания, и я обнаружил, что, как только вы преодолеваете кривую обучения, вы можете разрабатывать симуляции удивительно быстро. То, что займет 80 человеко-часов в других так называемых агентских средах (Jade, Repast, которые действительно в основном являются просто библиотеками программирования), может быть сделано за 2 часов.

С другой стороны, netlogo на самом деле не подходит для моделирования, которое требует огромного количества деталей, например, имитация сети на всем пути от TCP/IP до HTTP. Это просто потребует большого количества кода, независимо от языка программирования, и netlogo в настоящее время отстой, если ваша программа в конечном итоге больше, чем 10 страниц. Сказав это, большинство людей были бы поражены тем, что можно сделать на 10 страницах кода netlogo.

-121--2774053-

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

-121--2664691-

Я нашел ответ coolbird особенно полезным.

Но я изменил последние операторы результата на:

if (extensionIndex == -1)
  return s;

return s.substring(0, lastSeparatorIndex+1) 
         + filename.substring(0, extensionIndex);

, так как хотел вернуть полное имя пути.

So "C:\Users\mroh004.COM\Documents\Test\Test.xml" becomes 
   "C:\Users\mroh004.COM\Documents\Test\Test" and not
   "Test"
5
ответ дан 23 November 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: