There's zero reason why you need to have that integer/string dichotomy since you never need to treat them as integers - simply use strings for all values.
In addition, you may be better off (from a statistical distribution point of view) getting one random number and using that to select both values:
public static void main (String[] args) {
Scanner input = new Scanner (System.in);
String suits[] = {"H","D","C","S"};
String cards[] = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
Random random = new Random ();
int num = random.nextInt (cards.length * suits.length);
System.out.println (cards[num % cards.length] + suits[num / suits.length]);
}
But keep in mind that this random card selection scheme only works if you have an infinite number of decks in your shoe. Casinos like to use multiple decks to reduce the impact of card counting but even they cannot do an infinite deck :-)
To properly emulate a casino, you would create a shoe structure containing x
decks of cards which you would simply choose random ones from for dealing out (and removing from the shoe).
Then, when the shoe gets to a ore-determined size after a deal (eg, down to 20% of original size, another means by which casinos battle card counting), you reinvoke the "shuffle" - quoted since you needn't actually shuffle the cards when you can use Fisher Yates to shuffle on demand, as per another answer of mine here.