Удалить конечную подстроку из строки в Java

1

Я хочу удалить части строки, если она заканчивается определенной строкой.

Примером может служить эта строка: "[email protected]"

И удалите @2x.png чтобы он выглядел так: "am.sunrise.ios"

Как я могу проверить, содержит ли конец строки "@2x.png" и удаляет ее?

  • 1
    Проверьте substring и методы endsWith с классом String
  • 0
    Это хорошо задокументировано: строка # заканчивается с
Показать ещё 1 комментарий
Теги:
string

6 ответов

1
Лучший ответ

Поскольку я пытался сделать это в ArrayList элементов, похожих на стиль, я закончил использовать следующий код:

    for (int image = 0; image < IBImages.size(); image++) {
        IBImages.set(image, IBImages.get(image).split("~")[0].split("@")[0].split(".png")[0]);
    }

Если у меня есть список изображений с именами

[am.sunrise.ios.png, [email protected], [email protected], am.sunrise.ios~ipad.png, [email protected]]

Это позволяет мне разбить строку на две части. Например, "am.sunrise.ios ~ ipad.png" будет разделен на "am.sunrise.ios" и "~ ipad.png", если я разделился на "~". Я могу просто вернуть первую часть, ссылаясь на [0]. Поэтому я получаю то, что ищу в одной строке кода.

Обратите внимание, что изображение "am.sunrise.ios ~ ipad.png"

3

Вы можете проверить lastIndexOf, и если он существует в строке, используйте substring чтобы удалить ее:

String str = "[email protected]";
String search = "@2x.png";

int index = str.lastIndexOf(search);
if (index > 0) {
    str = str.substring(0, index);
}
  • 0
    String.lastIndexOf может найти подстроку в любом месте строки, а не только в конце. str.endsWith(suffix) вы должны проверить str.endsWith(suffix) , и затем вы можете str.endsWith(suffix) вызов lastIndexOf .
1

Предположим, что у вас есть строка, инициализированная как String file = "[email protected]"; ,

if(file.endsWith("@2x.png"))
    file = file.substr(0, file.indexOf("@2x.png"));

Метод endsWith(String) возвращает логическое определение, если строка имеет определенный суффикс. В зависимости от этого вы можете заменить строку самой подстрокой между первым символом и перед индексом символа, который вы пытаетесь удалить.

  • 1
    Попробуйте использовать lastIndexOf .
  • 0
    Индекс не может быть равен -1, так как строка уже проверена и заканчивается на "@ 2x.png"
Показать ещё 1 комментарий
0

Вы можете использовать String.split():

public static void main(String [] args){
  String word = "[email protected]";
  String[] parts = word.split("@");
  if (parts.length == 2) {
    System.out.println("looks like user@host...");
    System.out.println("User: " + parts[0]);
    System.out.println("Host: " + parts[1]);
  }
}

Затем у вас есть массив строк, где первый элемент содержит часть перед "@", а второй элемент - часть после "@".

0
public static void main(String [] args){

    String word = "[email protected]";

    word = word.replace("@2x.png", "");

    System.out.println(word);
}
  • 0
    Это не удаляет эту строку с конца. Например, строка может быть "@[email protected]" и это должно привести к "@2x.png" not "", так как это повлияет на цель задающего.
  • 0
    Я не уверен, что знаю, что вы имеете в виду. Я просто снова запустил код, и результат был ...... "am.sunrise.ios" Я не очень опытен в этом, поэтому, если я что-то упустил, пожалуйста, помогите мне понять.
Показать ещё 2 комментария
0

Если вы хотите вообще удалить весь контент строки с @ до конца, вы можете использовать

yourString = yourString.replaceAll("@.*","");

где @.* - регулярное выражение (выражение), представляющее подстроку, начинающуюся с @ и имеющую любой символ после него (представленный .) ноль или более раз (представлен *).

Если не будет части @xxx ваша строка будет неизменной.


Если вы хотите изменить только эту конкретную подстроку @2x.png (а не подставлять как @3x.png), убедившись, что она помещена в конце строки, вы можете использовать

yourString = yourString.replaceAll("@2x\\.png$","");

где

  • $ представляет конец строки
  • \\. представляет . буквальным (нам нужно, чтобы избежать его, так как было показано ранее . метасимвол, представляющий любой символ)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню