我正在编写一种方法来修剪字符串中的某些字符。 s1是实际字符串,s2是要从字符串中修剪的字符。在我的主要方法中,我打电话给:
String text = U.trim("what ?? the hell", '?');
其余的代码是我写的trim方法。问题是每当我放两个?标记在一起它只修剪其中一个,但如果我把它们分开它修剪它们很好。我不知道我做错了什么,我甚至在代码本身中放置了打印语句来尝试调试它,如果你运行代码,你会发现这两个问号都在c [5 ]和c [6],如果该字符是a,则在if语句下面?标记它将替换它并打印出来" 5;?"但是我不知道为什么它在比较c [6]时,它会返回问号因为c [6]是一个问号。请帮忙。
static String trim(String s1, char s2) {
char c[] = new char[s1.length()];
String text = "";
for (int i = 0; i < s1.length(); i++) {
c[i] = s1.charAt(i);
}
for (int i = 0; i < s1.length(); i++) {
System.out.println("C" + i + ": " + c[i]);
}
for (int i = 0; i < s1.length(); i++) {
System.out.println("Start: " + i);
if (c[i] == s2) {
System.out.println(i + ";" + s2);
for (int j = i; j < s1.length(); j++) {
if (j != s1.length() - 1) {
c[j] = c[j + 1];
} else {
c[j] = '\0';
}
}
}
}
for (int i = 0; i < c.length; i++) {
text = text + c[i];
}
return text;
}
我尝试了模式类,它没有修剪问号。
String text = "Hello ????";
text.replaceAll(Pattern.quote("?"), "");
System.out.println(text);
答案 0 :(得分:2)
你可以使用s1.replace(&#34;?&#34;,&#34;&#34;) 这与replaceAll类似,但replaceAll使用正则表达式。
replace()替换字符串中的所有出现。
现在,关于你做错了什么:
当您在字符数组中找到匹配项时,您将剩余的字符移向头部。
从&#34; abc ?? def&#34;开始,你的第一场比赛是在i = 3。 您将所有剩余的字符移动到&#34; abc?def&#34; 然后,将i增加到4,然后继续。 c [4]是&#39; d&#39;在这一点上。
所以,错误是当你将字符向左移动时,你仍然会增加i,导致第一个移位的字符被跳过。