从字符串java中删除未知数量的字符

时间:2018-11-02 07:07:28

标签: java string char trim

我有以下任务: 从给定字符串的开头和结尾修剪给定字符。 例如,如果给定的字符串为“ 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 :(得分:2)

您可以使用以下方法还原字符串:

public override void Refresh()
{
    Read(Offset, Range);  // Reads a portion of the screen (bitblt copy) ~8ms

    _preprocesed = Preprocess(_buffer); // OpenCV methods to prep for OCR

    var text = _preprocesed.ToText(_ocrOptions); // Tesseract OCR conversion ~10ms

    var vals = text.Trim().Replace(" ", string.Empty).Split('/'); // Reformat

    if (vals.Length != 2)
        return;

    int.TryParse(vals[0], out var current);
    // Setter (only updates if changed INotifyPropertyChanged)
    Current = current; 

    int.TryParse(vals[1], out var refreshCap);
    // Setter (only updates if changed INotifyPropertyChanged)
    RefreshCap = refreshCap;
}

,然后再次将您的方法放在上面。

答案 1 :(得分:2)

向前和向后迭代仅应用于查找最终字符串的开始索引和结束索引,然后通过单个“ 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);
}

答案 2 :(得分:1)

您可以同时在两个方向上遍历字符串:

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编辑器,请原谅语法问题:)

希望这会有所帮助!

答案 3 :(得分:1)

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);
}

答案 4 :(得分:1)

您可以更简单地完成

public static void main(String[] args) {

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

}

答案 5 :(得分:1)

公共静态字符串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);
}