我有以下任务: 从给定字符串的开头和结尾修剪给定字符。 例如,如果给定的字符串为“ 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,只能使用子字符串。 请告诉我如何删除结尾而不在中间切出相同字符
答案 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);
}