こんにちわ!

知ってました?
人間って文字を認識するときに、
最初と最後の文字さえあっていれば他の文字の順番がめちゃくちゃでも
ちゃんと読めるそうですw

ケンブリッジ大学での研究だそうですよ^^
百聞は一見に如かず!試してみてくださいw

こんちには みさなん おんげき ですか? わしたは げんき です。
この ぶんょしう は いりぎす の ケブンッリジ だがいく の
けゅきんう の けっか にんんげ は もじ を にしんき する とき
その さしいょ と さいご の もさじえ あいてっれば じばんゅん は
めくちちゃゃ でも ちんゃと よめる という けゅきんう に もづいとて
わざと もじの じんばゅん を いかれえて あまりす。
どでうす? ちんゃと よゃちめう でしょ?
ちんゃと よためら はのんう よしろく

どおです?普通に読んだらちゃんと読めませんか?!w
ちょっと感動しますよね!

で、早速IT戦記さんでは流行りのケブンリッジ関数 - JavaScript 編
javascriptC++で実装した
「最初と最後の文字以外をばらばらの順番にするプログラム」
を紹介されてますw

Rubyでの実装はどうかく?orgにて紹介されてます!
Cでの実装もどうかく?orgにありました〜

な、、なんとw
PL/SQLで実装された方もいらっしゃいました。w
PL/SQL de ケンブリッジ関数

じゃ。。。じゃあ。
私はjavaで。。。^^;

public static String Cambridge(String text , String separator){

	String[] pArray = text.split(" ");
	String result = "";

	for(int i=0;i<pArray.length;i++){
		int plength = pArray[i].length();
		char[] cArray;
		Character[] charaArray;
		List<Character> cList;
		
		//4文字以上じゃなければ並び替えれない			
		if(plength < 4){
			result += pArray[i] + " ";
			continue;
		}
		
		//先頭の文字・最後の文字、それ以外に分ける
		String firstChar = pArray[i].substring(0,1);
		String lastChar = pArray[i].substring(plength-1,plength);
		String middleChars = pArray[i].substring(1,plength-1);
		
		//String→char[]→Character[]
		cArray = middleChars.toCharArray();
		charaArray = new Character[cArray.length];
		
		for(int j=0;j<charaArray.length;j++){
                    charaArray[j] = new Character(cArray[j]);
                }
		
		//Listにして並び替え
		cList = java.util.Arrays.asList(charaArray);
		Collections.shuffle(cList);
		
		//Character[]→char[]→String
		for(int k=0; k<cList.size(); k++){
                    cArray[k] = cList.get(k).charValue();
                }
		middleChars = new String(cArray);	
		result += firstChar + middleChars + lastChar + " ";
	}
	return result;
}


javaで書くと長くなっちゃうなぁ。。。
てかこんなやり方でいいのか!?wもっとスマートに書けるような。。。
ご指摘ありましたら是非是非御願いします!