最初の方法-ループを前から後ろにトラバースし、削除する文字でない場合は、処理された文字列に追加します。コードは次のとおりです。
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;
}
2番目の方法-ループによって削除する文字の位置インデックスを決定し、文字列を分割してサブ文字列を連結します。最後のサブ文字列とソース文字列には削除する文字がないことに注意してください。コードは次のとおりです。
public String deleteCharString1(String sourceString, char chElemData) {
String deleteString = "";
int iIndex = 0;
for (int i = 0; i < sourceString.length(); i++) {
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());
}
return deleteString;
}
3番目の方法-原理は上記と同じですが、Stringクラスの関数を使用して削除する文字の位置を検索します。効率は上記ほど高くありません。コードは、次のとおりです。
public String deleteCharString2(String sourceString, char chElemData) {
String deleteString = "";
int iIndex = 0;
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);
if (iIndex <= sourceString.length()) {
deleteString += sourceString.substring(iIndex, sourceString.length());
}
return deleteString;
}
4番目の方法-原理は基本的に上記と同じですが、今回は逆の順序が使用され、ここにさらに多くのピットがあり、インデックスの値の範囲とそれが合法であるかどうかに注意する必要があります。コードは次のとおりです。
public String deleteCharString3(String sourceString, char chElemData) {
String deleteString = "";
int iIndex = sourceString.length();
int tmpCount = 0;
do {
tmpCount = sourceString.lastIndexOf(chElemData, iIndex - 1);
if (tmpCount < sourceString.length() && tmpCount >= 0) {
deleteString = sourceString.substring(tmpCount + 1, iIndex) + deleteString;
}
if (tmpCount != -1) {
iIndex = tmpCount;
}
} while (tmpCount != -1);
if (iIndex >= 0) {
deleteString = sourceString.substring(0, iIndex) + deleteString;
}
return deleteString;
}
5番目の方法-通常の方法とreplaceAll関数を使用することにより、この方法は、エスケープする必要がある通常の「。」文字などの特殊な文字に注意を払う必要があります。コードは次のとおりです。
public String deleteCharString4(String sourceString, char chElemData) {
String deleteString = "";
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, "");
return deleteString;
}
6番目の方法-文字列を通常の方法でいくつかのサブ文字列に分割してから、サブ文字列を連結すると、コードは次のようになります。
public String deleteCharString5(String sourceString, char chElemData) {
String deleteString = "";
final String strTable = "|^$*+?.(){}\\";
String tmpRegex = "[";
for (int i = 0; i < strTable.length(); i++) {
if (strTable.charAt(i) == chElemData) {
tmpRegex += "\\";
break;
}
}
tmpRegex += chElemData + "]";
String[] tmpStringArray = sourceString.split(tmpRegex);
for (int i = 0; i < tmpStringArray.length; i++) {
deleteString += tmpStringArray[i];
}
return deleteString;
}
7番目のメソッド—読み取り可能な文字シーケンスをプログラムし、それらをStringクラスのメソッドに置き換えます。コードは次のとおりです。
public String deleteCharString6(String sourceString, char chElemData) {
String tmpString = "";
tmpString += chElemData;
tmpString.subSequence(0, 0);
String deleteString = "";
deleteString = sourceString.replace(tmpString, deleteString.subSequence(0, 0));
return deleteString;
}
8番目の方法-元の文字列を文字配列に変換すると、その原理は直接挿入ソートの原理と同様になり、コードは次のようになります。
public String deleteCharString7(String sourceString, char chElemData) {
String deleteString = "";
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];
}
return deleteString;
}
9番目のメソッド-原理は最初のメソッドと同様ですが、今回はstringBufferクラスのappendメソッドを使用して操作します。最初のメソッドよりも効率が高いはずです。
public String deleteCharString8(String sourceString, char chElemData) {
StringBuffer stringBuffer = new StringBuffer("");
for (int i = 0; i < sourceString.length(); i++) {
if (sourceString.charAt(i) != chElemData) {
stringBuffer.append(sourceString.charAt(i));
}
}
return stringBuffer.toString();
}
10番目のメソッド-stringBufferクラスのreplaceおよびindexOfメソッドを使用します(_意図的に収集するメソッド)。コードは次のとおりです。
public String deleteCharString9(String sourceString, char chElemData) {
String tmpString = "";
tmpString += chElemData;
StringBuffer stringBuffer = new StringBuffer(sourceString);
int iFlag = -1;
do {
iFlag = stringBuffer.indexOf(tmpString);
if (iFlag != -1) {
stringBuffer = stringBuffer.replace(iFlag, iFlag + 1, "");
}
} while (iFlag != -1);
return stringBuffer.toString();
}
11番目のメソッド-stringBufferクラスのdeleteCharAtとindexOfを使用して直接削除します
public String deleteCharString10(String sourceString, char chElemData) {
String tmpString = "";
tmpString += chElemData;
StringBuffer stringBuffer = new StringBuffer(sourceString);
int iFlag = -1;
do {
iFlag = stringBuffer.indexOf(tmpString);
if (iFlag != -1) {
stringBuffer.deleteCharAt(iFlag);
}
} while (iFlag != -1);
return stringBuffer.toString();
}
実行中のプログラムのスクリーンショット:
JAVA文字列で指定された文字を削除する方法
jdk java.lang.String.replace(CharSequence、CharSequence)メソッドの助けを借りて