文字列のアルゴリズム(Java実装)

<1>スペースを置き換えます

タイトル説明

、にそれぞれのスペースを置き換えるために、文字列関数を実装してください「20%。」文字列があるとき例えば、私たちは幸せです。文字列は今後%20Are%20Happy後に交換された後。
コードは以下の通りであります:
パブリッククラスのソリューション{ 
    パブリック文字列replaceSpace(StringBufferの列str){ 
    	int型LEN = str.length()。
        StringBufferの解像度=新しいStringBufferを(); 
        
        以下のために(int型私= 0;私がlen <;私は++){ 
            場合(str.charAt(I)= '「!){ 
                res.append(str.charAt(I)); 
            }他{ 
                res.append( "%20")。
            } 
        } 
        )(res.toString返します。
    }

 <二>正規表現のマッチング

タイトル説明

実装は、「と一致」と「*」正規表現する機能を備えています。モード文字が「」 『*』任意の1つの文字を表し前の文字が(0時間を含む)任意の回数現れることができることを示しています。この問題では、試合全体のパターンが文字列のすべての文字に一致しています。たとえば、文字列「AAA」モードと「AA」と「AB *交流*」試合が、「aa.a」と「abが*」一致しません。
コードは以下の通りであります:
パブリッククラスのソリューション{ 
    パブリックブールマッチ(CHAR [] STRチャー[]パターン){ 
        IF((ヌル== STR &&ヌル==パターン)||(ヌル= STR &&パターン== NULL)!){ 
            trueを返します。
        } 
        
        (!ヌル== STR &&パターン= NULL)場合、{ 
            falseを返します。   
        } 
        
        modeoMatch(STR、パターン、0,0)を返します。
    } 
    
    プライベートブールmodeoMatch(CHAR [] STR、[]パターンをCHAR、INT SLEN、INT PLEN){ 
        (pattern.length SLEN == str.length && PLEN ==)場合{ 
            trueを返します。
        } 
        {(!SLEN = str.length && PLEN == pattern.length)であれば
            falseを返します。
        }
        
        IF(PLEN +。1 <pattern.length &&パターン[PLEN + 1] == '*'){ 
            IF(SLEN <str.length &&(STR [SLEN] ==パターン[PLEN] ||パターン[PLEN] == )){ '' 
                modeoMatch(STR、パターン、SLEN +を返す1、PLEN)|| modeoMatch(STR、パターン、SLEN、PLEN + 2); 
                 
            }他{ 
                modeoMatch(STR、パターン、SLEN、PLEN + 2)を返します; 
            } 
        } 
        
       最初の魚の背面から決定されるように、//は、背面に配置されなければならない
        場合には(SLEN <str.length &&(STR [SLEN] ==パターン[PLEN] ||パターン[PLEN] ==) '') { 
            (1 +、+ PLEN 1 SLEN、STR、パターン)modeoMatchを返す; 
        } 
        
        偽に戻り; 
    } 
}

 <スリー>数値文字列を表し、

タイトル説明

文字列が(整数および端数を含む)の値を表しているかどうかを決定するために使用される機能を実現します。例えば、文字列 "100"、 "5E2"、 " - 123"、 "3.1416" および "-1E-16" の値を示しています。しかし、 "12E"、 "1a3.14"、 "1.2.3"、 "+ - 5" と "12E + 4.3" もありません。
コードは以下の通りであります:
パブリッククラスソリューション{ 
    
    プライベートint型のインデックス= 0; 
    パブリックブールISNUMERIC(CHAR [] STR){ 
        (str.length <= 0){場合に
            falseを返します。
        } 
        ブール・フラグ= scanInteger(STR)。
        もし(指数<str.length && STR [インデックス] == ''){ 
            インデックス++; 
            フラグ= scanInteger(STR)|| フラグ; 
        } 
         もし(指数<str.length &&(STR [インデックス] == 'E' || STR [インデックス] == 'E')){ 
            インデックス++; 
            フラグ=フラグ&& scanInteger(STR)。
        } 
        戻りフラグ&&インデックス== str.length。
    
    } 
    
        もし(指数<str.length && 
            インデックス++; 
        } 
        INT =インデックスを開始。
        //Character.isDigit(str[index])相同与STR [インデックス]> = '0' && STR [インデックス] <= '9' 
        ながら(指数<str.length && STR [インデックス]> = '0' && STR [インデックス] <= '9'){ 
            インデックス++; 
        } 
        <インデックス開始返します。
    } 
}

 <四>文字ストリームは、最初の文字を繰り返しません

タイトル説明

文字にのみ表示されます初めての文字列を検索するために機能を実装してください。例えば、文字ストリームは最初の2つの文字を読み取ったときに、最初の文字は一度だけ「G」を発生し、「行きます」。文字ストリームから「グーグル」最初の6つの文字を読み出すときは、最初の一つだけの文字が「L」で表示されます。

出力説明:

現在の文字列が文字がある表示されない場合は、#文字を返します。

コードは以下の通りであります:

 
輸入java.util.HashMapを; 
輸入はjava.util.ArrayList; 

パブリッククラスのソリューション{ 
    
    HashMapの<文字、整数>マップ=新しいHashMapの<文字、整数>(); 
    ArrayListのリスト=新しいArrayListを(); 
    
    //にstringstreamから1つの文字を挿入し
    ます。public void(char型CH){INSERT 
        場合(map.containsKey(CH)!){ 
            map.put(CH、1); 
            list.add(CH)。
        }他{ 
            map.put(CH、map.get(CH)+ 1)。
        } 
    } 
  電流にstringstreamにチャー後最初appearenceを戻す// 
    {)(公衆チャーFirstAppearingOnce 
        {(;私は(はlist.sizeを<)I ++は、I = 0をINT)ため
            (map.get(list.get(I)の場合) == 1){
                リターン(CHAR)list.get(I); 
            } 
        } 
        リターン'#'; 
    } 
}

 

 

おすすめ

転載: www.cnblogs.com/youdiaodaxue16/p/11374567.html