For most cases String class itself is good . API has enough right use is the trick
Unless using String class operations itself is source of performance bottleneck, try StringBuilder/StringBuffer. if thats not good/ possible yes go for char Arrays.
Its a question of drawing line b/w Readable code, right maintainable implementation and performance. U will have rework for sure in many cases.....
Example cases of apt usages....
CASE : replacing chars in string
EX - s.replace('<','['); Its apt... Its best than char operation
doing s.replace("<","[") --- incorrect use, overkill
CASE: using String.replace("\n","") is slower.
Even for removing invalidXML Chars from external input....
converting to char array and doing array operation, atleast 3X faster
CASE : If doing pattern find and replace then well String.replaceAll is better bet...
Using replaceAll for non patterns will not help performance
CASE: char Access -- doing charAt() v/s (toCharArray() then charArray[i])
cahrArray[n] emerges clear winner at 100.
charAt() : String length (4-10) way faster
charArray[i]: String length 1000+ approaches 0.4X fastness
if source String is constant then changing to charArray is works
I recollect these from my own experience
Let me know more if you know