It depends in your game loop.
If you have separated logic and rendering, you need two strings one with all the text, one with the text written, and an int to hold the position.
String message = "This is my very long text that must appear letter by letter";
String screenMessage = "";
int messagePos = 0;
Then in your logic code:
screenMessage = screenMessage + message.charAt(messagePos);
if(messagePos == mesage.length())
And in your render code:
This will update your text at the same speed of your refresh rate. You should have to add som delay betwen update in the logic code to make it slower.