問題の説明
スペースの置き換え:文字列sの各スペースを「%20」に置き換える関数を実装してください。
入力:s = "私たちは幸せです。"
出力: "We%20are%20happy。"
解決
1つ目は、タイトルを取得したときに考えていたメソッドで、replace()メソッドを直接呼び出したところ、置き換えが終了し、後で何かがおかしくなり、配列が範囲外になることがわかりました。
2つ目は、StringBufferクラスを呼び出し、その中のいくつかのメソッドを使用して配列を操作し、最後に配列を出力することです。この方法は比較的直感的ですが、それでも質問の意味を満たしていないため、範囲外の配列の問題が発生します。
3番目のタイプは、最初に配列を定義し、その長さは元の文字列の3倍です。次に変数を定義し、配列を走査します。スペースが見つかるたびに、変数は3ずつ増加し、文字が出力され、最後に配列が次のように変換されます。ストリング。
コード
String s = "We are happy.";
//第一种方法
s=s.replace(" ","%20");
System.out.println(s);
//第二种方法
StringBuffer sb= new StringBuffer();
for(int i = 0 ; i < s.length(); i++){
char c = s.charAt(i);
if(c == ' ') {
sb.append("%20");
}
else {
sb.append(c);
}
}
System.out.println(sb);
//第三种方法
int i = s.length();
int nums = 0;
char[] arr = new char[i*3];
for (int l=0;l<i;l++){
char c = s.charAt(l);
if (c==' '){
nums += 3;
arr[--nums] = '0';
arr[--nums] = '2';
arr[--nums] = '%';
nums += 3;
}else{
arr[nums] = c;
nums +=1;
}
}
s = String.valueOf(arr);
System.out.println(s);
総括する
前者の方法は問題の意味を満たしていません。後者の方法と第3の方法は基本的に考え方は同じです。どちらの方法も最初にスペースを配置してから変換を実行しますが、演算の順序に大きな違いがあります。2番目の方法は、配列の長さに注意を払わず、配列の範囲外の問題を引き起こす可能性があります。3番目の方法は、配列の長さの3倍を事前に定義します(3倍の長さを定義する理由は、文字列がすべてスペースの場合、すると、変換後の長さは元の長さの3倍になります)。変数自体を増やして、最後に文字列に変換します。