文字列の各スペースを「%20」に置き換える関数を実装してください。たとえば、文字列がWe Are Happyの場合、置換後の文字列はWe%20Are%20Happyです。
注意が必要な事項:
- Stringの値は不変であり、Stringを操作するたびに新しいStringオブジェクトが作成されます。これは非効率的であるだけでなく、限られた多くのメモリ領域を浪費します。文字列を変更するときは、StringBufferとStringBuilderクラス。
- Stringクラスとは異なり、StringBufferクラスとStringBuilderクラスのオブジェクトは複数回変更でき、未使用の新しいオブジェクトは生成されません。StringBuilderクラスはJava 5で導入されました。このクラスとStringBufferの最大の違いは、StringBuilderメソッドはスレッドセーフではない(同期的にアクセスできない)ことです。StringBuilderはStringBufferよりも速度が速いため、ほとんどの場合、StringBuilderクラスを使用することをお勧めします。ただし、スレッドセーフが必要なアプリケーションでは、StringBufferクラスを使用する必要があります。
- StringBufferのchar chatAt(ingt index)メソッドは、指定されたインデックスにある文字を返すために使用されることに注意してください。
- 注:java文字列は「\ 0」で終わっていませんが、cまたはc ++は「\ 0」で終わります。
-
問題解決のアイデア:
在当前字符串替换,怎么替换才更有效率(不考虑java里现有的replace方法)。从前往后替换,后面的字符要不断往后移动,要多次移动,所以效率低下从后往前,先计算需要多少空间,然后从后往前移动,则每个字符只为移动一次,这样效率更高一点。
public String replaceSpace(StringBuffer str) {
if(str==null)
return null;
int oldnum = str.length();
int countblank = 0;
for(int i=0;i<oldnum;i++){
if(str.charAt(i)==' '){
countblank++;
}
}
int newlength = oldnum + countblank*2;
str.setLength(newlength);
int pnewlength = newlength -1;//Java字符串结尾没有'/0'
for (int j = oldnum-1;j >= 0;j--){
if(str.charAt(j)==' '){
str.setCharAt(pnewlength--,'0');
str.setCharAt(pnewlength--,'2');
str.setCharAt(pnewlength--,'%');
}else{
str.setCharAt(pnewlength,str.charAt(j));
pnewlength--;
}
}
return str.toString();
}