天天看點

JAVA-String 中删除指定字元(11種方法)

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

程式運作截圖:

JAVA-String 中删除指定字元(11種方法)