Удалить неизвестное количество символов из строки Java - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть следующее задание: Обрезать данный символ от начала и конца данной строки. Например, если заданная строка - «aaahappy birthdayaaaaaaa», а заданный символ - «a», возвращает строку «happy birthday». Мне удалось удалить начало, но я не могу найти способ удалить конец. мой код:

public static String trim(String str, char c) {
    String newStr = "";
    for (int i = 0; i < str.length () && str.charAt (i) == c; i++) {
            newStr = str.substring (i+1);

    }
    String ans = "";
    for (int j = 0; j<newStr.length () && newStr.charAt (j) == c; j++) {
        ans = newStr.substring (0,j);
    }
    return ans;
}

Я не могу использовать trim или replaceAll, только подстроку. Пожалуйста, дайте мне идеи, как убрать окончание без вырезания того же символа в середине

Ответы [ 6 ]

0 голосов
/ 02 ноября 2018

public static String getTrimmedString (String s, char c) {

    int i = 0;
    int len = s.length();

    while (i<len && s.charAt(i)==c){
        i++;
    }
    while(len>i && s.charAt(len-1)==c){
        len--;
    }
    return s.substring(i, len);
}
0 голосов
/ 02 ноября 2018

Вы можете сделать это проще

public static void main(String[] args) {

    String str = "aaahappy birthdayaaaaaaa";
    char c = 'a';
    String newStr = str.replaceAll("(^["+c+"]+|["+c+"]+$)", "");
    System.out.println(newStr);

}
0 голосов
/ 02 ноября 2018

прямая и обратная итерации должны использоваться только для того, чтобы узнать начальный и конечный индексы для конечной строки, затем один вызов "subString" должен вернуть окончательную строку.

public static String trim(String str, char c) {
    int begIndex = 0;
    while (begIndex<str.length() && str.charAt(begIndex) == c) {
        begIndex++;
    }

    int endIndex = str.length()-1;
    while (endIndex>= 0 && str.charAt(endIndex) == c) {
        endIndex--;
    }
    return str.substring(begIndex, endIndex+1);
}
0 голосов
/ 02 ноября 2018
public static String trim(String str, char c) {
    int beginIndex = -1, endIndex = str.length();

    for (int i = 0, j = str.length() - 1; i <= j; i++, j--) {
        beginIndex += beginIndex + 1 == i && str.charAt(i) == c ? 1 : 0;
        endIndex -= i != j && endIndex - 1 == j && str.charAt(j) == c ? 1 : 0;
    }

    return str.substring(beginIndex + 1, endIndex);
}
0 голосов
/ 02 ноября 2018

Вы можете пройти строку в обоих направлениях одновременно:

public static String trim(String str, char c) {    
    int start = 0, end = str.length - 1;
    boolean foundStart = false, foundEnd = false;
    for (int i = 0, j = str.length - 1; i < str.length (); i++, j--) {
       if (str.charAt(i) != c && !foundStart) {
         start = i; foundStart = true;
       }

       if (str.charAt(j) != c && !foundEnd) {
         end = j; foundEnd = true;
       }

       if (foundStart && foundEnd) {
          break;
       }
    }

    return str.subString(start, end + 1);
}

Кодировано это редактор stackOverflow, пожалуйста, прости синтаксические проблемы, если таковые имеются:)

Надеюсь, это поможет !!

0 голосов
/ 02 ноября 2018

Вы можете вернуть свою строку, используя это:

new StringBuilder(yourString).reverse().toString();

и затем поместите ваш метод снова.

...