java老師給我們留了一個課後作業,要求我們通過搜尋jdk用盡可能多的方法删除string類中的指定字元,我隻想到了 11 種方法,如果有不足或者遺漏希望讀者能夠不吝賜教。
第一種方法 – 通過循環從前往後周遊,如果不是要删除的字元則加到處理後的字元串中,代碼如下:
public string deletecharstring0(string sourcestring, char chelemdata) {
string deletestring = "";
for (int i = 0; i < sourcestring.length(); i++) {
if (sourcestring.charat(i) != chelemdata) {
deletestring += sourcestring.charat(i);
}
return deletestring;
第二種方法 — 通過循環确定要删除字元的位置索引,然後通過分割字元串的形式,将子字元串拼接,注意最後一段子字元串和源字元串中沒有要删除字元的情況,代碼如下:
public string deletecharstring1(string sourcestring, char chelemdata) {
int iindex = 0;
if (sourcestring.charat(i) == chelemdata) {
if (i > 0) {
deletestring += sourcestring.substring(iindex, i);
iindex = i + 1;
if (iindex <= sourcestring.length()) {
deletestring += sourcestring.substring(iindex, sourcestring.length());
第三種方法 — 原理同上,隻不過查找要删除字元位置采用string類中的函數執行,效率不如上面的高,java班級資料群,首先是一二六,中間是五三四,最後是五一九,也可以交流,裡面都是從事java工作代碼如下:
public string deletecharstring2(string sourcestring, char chelemdata) {
int tmpcount = 0;
do {
tmpcount = sourcestring.indexof(chelemdata, iindex);
if (tmpcount > 0) {
deletestring += sourcestring.substring(iindex, tmpcount);
if (tmpcount != -1) {
iindex = tmpcount + 1;
} while (tmpcount != -1);
第四種方法 — 原理與上方基本一緻,隻不過這次采用倒序方式,這裡的坑就更多了,一定要注意索引的取值範圍和是否合法,代碼如下:
public string deletecharstring3(string sourcestring, char chelemdata) {
int iindex = sourcestring.length();
tmpcount = sourcestring.lastindexof(chelemdata, iindex - 1);
if (tmpcount < sourcestring.length() && tmpcount >= 0) {
deletestring = sourcestring.substring(tmpcount + 1, iindex) + deletestring;
iindex = tmpcount;
if (iindex >= 0) {
deletestring = sourcestring.substring(0, iindex) + deletestring;
第五種方法 — 通過采用正則的方式和replaceall函數,本種方法要注意特殊字元,例如正則中的 “.”字元,需要對特殊字元進行轉義,代碼如下:
public string deletecharstring4(string sourcestring, char chelemdata) {
final string strtable = "|^$*+?.(){}\\";
string tmpregex = "[";
for (int i = 0; i < strtable.length(); i++) {
if (strtable.charat(i) == chelemdata) {
tmpregex += "\\";
break;
tmpregex += chelemdata + "]";
deletestring = sourcestring.replaceall(tmpregex, "");
第六種方法 — 采用正則的方式将字元串分割成幾個子字元串,再将子字元串進行拼接,代碼如下:
public string deletecharstring5(string sourcestring, char chelemdata) {
string[] tmpstringarray = sourcestring.split(tmpregex);
for (int i = 0; i < tmpstringarray.length; i++) {
deletestring += tmpstringarray[i];
第七種方法 — 将字元程式設計可讀序列,在通過 string 類中的方法替換,代碼如下:
public string deletecharstring6(string sourcestring, char chelemdata) {
string tmpstring = "";
tmpstring += chelemdata;
tmpstring.subsequence(0, 0);
deletestring = sourcestring.replace(tmpstring, deletestring.subsequence(0, 0));
第八種方法 — 把原字元串轉化為字元數組,然後原理與直接插入排序原理類似,代碼如下:
public string deletecharstring7(string sourcestring, char chelemdata) {
char[] bytes = sourcestring.tochararray();
int isize = bytes.length;
for (int i = bytes.length - 1; i >= 0; i--) {
if (bytes[i] == chelemdata) {
for (int j = i; j < isize - 1; j++) {
bytes[j] = bytes[j + 1];
isize--;
for (int i = 0; i < isize; i++) {
deletestring += bytes[i];
第九種方法 — 原理與 第一種方法 類似,本次采用 stringbuffer 類中的 append 方法進行操作,我認為效率應該高于第一種。
public string deletecharstring8(string sourcestring, char chelemdata) {
stringbuffer stringbuffer = new stringbuffer("");
stringbuffer.append(sourcestring.charat(i));
return stringbuffer.tostring();
第十種方法 — 采用 stringbuffer 類中的 replace and indexof 方法(^_^ 故意湊方法),代碼如下:
public string deletecharstring9(string sourcestring, char chelemdata) {
stringbuffer stringbuffer = new stringbuffer(sourcestring);
int iflag = -1;
iflag = stringbuffer.indexof(tmpstring);
if (iflag != -1) {
stringbuffer = stringbuffer.replace(iflag, iflag + 1, "");
} while (iflag != -1);
第十一種方法 — 采用 stringbuffer 類中的 deletecharat 和 indexof 直接删除
public string deletecharstring10(string sourcestring, char chelemdata) {
stringbuffer.deletecharat(iflag);
程式運作截圖:
