アルゴリズム:スペースを置き換える

問題の説明

スペースの置き換え:文字列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倍になります)。変数自体を増やして、最後に文字列に変換します。

おすすめ

転載: blog.csdn.net/weixin_46687295/article/details/106450307