import java.util.*;
import java.lang.*;
import java.io.*;
interface VowelFunction{
boolean isVowel(char ch);
}
class EnglishVowelFunction implements VowelFunction{
public boolean isVowel(char ch){
case 'a': return true;
case 'e': return true;
case 'i': return true;
case 'o': return true;
case 'u': return true;
}
return false;
}
}
interface StringCounter{
}
abstract class VowelCounter implements StringCounter{
VowelFunction vowelFunc;
private boolean isVowel(char ch){
return vowelFunc.isVowel(ch);
}
int count = 0;
for(char ch: s.toCharArray()){
if(isVowel(ch)){
count++;
}
}
return count;
}
}
class EnglishVowelCounter extends VowelCounter{
EnglishVowelCounter(){
vowelFunc = new EnglishVowelFunction();
}
}
//class TestVowelCount
class Ideone{
"abcdefghij",
"あげぽよ",
"アメンボあかいなあいうえお",
"隣の客はよく柿食う客だ",
"Köln",
"为了容易理解地说明某事物而引用的类似的东西",// https://c...content-available-to-author-only...o.jp/content/%E4%BE%8B%E6%96%87
};
StringCounter vowelCounter = new EnglishVowelCounter();
int count = vowelCounter.count(s);
System.
out.
println("vowels:"+count
); }
}
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgppbnRlcmZhY2UgVm93ZWxGdW5jdGlvbnsKCWJvb2xlYW4gaXNWb3dlbChjaGFyIGNoKTsKfQoKY2xhc3MgRW5nbGlzaFZvd2VsRnVuY3Rpb24gaW1wbGVtZW50cyBWb3dlbEZ1bmN0aW9uewoJcHVibGljIGJvb2xlYW4gaXNWb3dlbChjaGFyIGNoKXsKCQlzd2l0Y2goQ2hhcmFjdGVyLnRvTG93ZXJDYXNlKGNoKSl7CgkJY2FzZSAnYSc6IHJldHVybiB0cnVlOwoJCWNhc2UgJ2UnOiByZXR1cm4gdHJ1ZTsKCQljYXNlICdpJzogcmV0dXJuIHRydWU7CgkJY2FzZSAnbyc6IHJldHVybiB0cnVlOwoJCWNhc2UgJ3UnOiByZXR1cm4gdHJ1ZTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgppbnRlcmZhY2UgU3RyaW5nQ291bnRlcnsKCWludCBjb3VudChTdHJpbmcgcyk7Cn0KCmFic3RyYWN0IGNsYXNzIFZvd2VsQ291bnRlciBpbXBsZW1lbnRzIFN0cmluZ0NvdW50ZXJ7CglWb3dlbEZ1bmN0aW9uIHZvd2VsRnVuYzsKCQoJcHJpdmF0ZSBib29sZWFuIGlzVm93ZWwoY2hhciBjaCl7CgkJcmV0dXJuIHZvd2VsRnVuYy5pc1Zvd2VsKGNoKTsKCX0KCXB1YmxpYyBpbnQgY291bnQoU3RyaW5nIHMpewoJCWludCBjb3VudCA9IDA7CgkJZm9yKGNoYXIgY2g6IHMudG9DaGFyQXJyYXkoKSl7CgkJCWlmKGlzVm93ZWwoY2gpKXsKCQkJCWNvdW50Kys7CgkJCX0KCQl9CgkJcmV0dXJuIGNvdW50OwoJfQp9CgpjbGFzcyBFbmdsaXNoVm93ZWxDb3VudGVyIGV4dGVuZHMgVm93ZWxDb3VudGVyewoJRW5nbGlzaFZvd2VsQ291bnRlcigpewoJCXZvd2VsRnVuYyA9IG5ldyBFbmdsaXNoVm93ZWxGdW5jdGlvbigpOwoJfQp9CgovL2NsYXNzIFRlc3RWb3dlbENvdW50CmNsYXNzIElkZW9uZXsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbnsKCQlTdHJpbmdbXSBzdHJzID0gewoJCQkiYWJjZGVmZ2hpaiIsCgkJCSLjgYLjgZLjgb3jgogiLAoJCQki44Ki44Oh44Oz44Oc44GC44GL44GE44Gq44GC44GE44GG44GI44GKIiwKCQkJIumao+OBruWuouOBr+OCiOOBj+afv+mjn+OBhuWuouOBoCIsCgkJCSJLw7ZsbiIsCgkJCSLkuLrkuoblrrnmmJPnkIbop6PlnLDor7TmmI7mn5DkuovnianogIzlvJXnlKjnmoTnsbvkvLznmoTkuJzopb8iLC8vIGh0dHBzOi8vYy4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uby5qcC9jb250ZW50LyVFNCVCRSU4QiVFNiU5NiU4NwoJCX07CgkJCgkJZm9yKFN0cmluZyBzOiBzdHJzKXsKCQkJU3RyaW5nQ291bnRlciB2b3dlbENvdW50ZXIgPSBuZXcgRW5nbGlzaFZvd2VsQ291bnRlcigpOwoJCQlpbnQgY291bnQgPSB2b3dlbENvdW50ZXIuY291bnQocyk7CgkJCQoJCQlTeXN0ZW0ub3V0LnByaW50bG4ocyk7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigidm93ZWxzOiIrY291bnQpOwoJCX0KCX0KfQo=