How about this:
String[][] cardDeck = {
{ "AceH", "2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "10H", "JackH", "QueenH", "KingH" },
{ "AceD", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "JackD", "QueenD", "KingD" },
{ "AceS", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "JackS", "QueenS", "KingS" },
{ "AceC", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "JackC", "QueenC", "KingC" }};
int random_y = (int)(Math.random() * cardDeck.length);
int random_x = (int)(Math.random() * cardDeck[random_y].length);
System.out.println(cardDeck[random_y][random_x]);
Math.random() returns a random DECIMAL between 0 and 1, so if we multiply it by some number a, we get a random decimal between 0 and a (non-inclusive). Converting it to int, we then get a random integer between 0 and a. And that's exactly what we need to get a random index!
But in this case, we'll need 2 random integers, since this is a 2D array. You can call them random_x and random_y, since they'll correspond to the random column and random row respectively. So we can access the random element using cardDeck[random_y][random_x].
If you're still confused as to why we multiply it by the length of the array, consider this: to get a random row, we need to access cardDeck[i], where i is an integer between 0 and cardDeck.length. In this particular row of the matrix, we want a random element. So we access it using cardDeck[i][j], where j is an integer between 0 and cardDeck[i].length.