|
|
Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
Page 4 of 10
char [] digits = { '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'x' };
for (int i = 0; i < digits.length; i++)
System.out.println (Character.digit (digits [i], 16));
The fragment above converts the digits array's digit characters to their integer equivalents and outputs the results. Apart from the last character, each character
represents a hexadecimal digit. (Passing 16 as the radix argument informs digit(char c, int radix) that the number system is hexadecimal.) Because x does not represent a hexadecimal digit, digit(char c, int radix) outputs -1 when it encounters that character.
To demonstrate Character's isDigit(char c) and isLetter(char c) methods, I've created a CA (character analysis) application that counts a text file's digits, letters, and other characters. In addition to printing
those counts, CA calculates and prints each count's percentage of the total count. Listing 1 presents CA's source code (don't worry about the file-reading logic: I'll explain FileInputStream and other file-related concepts in a future article):
Listing 1: CA.java
// CA.java
// Character Analysis
import java.io.*;
class CA
{
public static void main (String [] args)
{
int ch, ndigits = 0, nletters = 0, nother = 0;
if (args.length != 1)
{
System.err.println ("usage: java CA filename");
return;
}
FileInputStream fis = null;
try
{
fis = new FileInputStream (args [0]);
while ((ch = fis.read ()) != -1)
if (Character.isLetter ((char) ch))
nletters++;
else
if (Character.isDigit ((char) ch))
ndigits++;
else
nother++;
System.out.println ("num letters = " + nletters);
System.out.println ("num digits = " + ndigits);
System.out.println ("num other = " + nother + "\r\n");
int total = nletters + ndigits + nother;
System.out.println ("% letters = " +
(double) (100.0 * nletters / total));
System.out.println ("% digits = " +
(double) (100.0 * ndigits / total));
System.out.println ("% other = " +
(double) (100.0 * nother / total));
}
catch (IOException e)
{
System.err.println (e);
}
finally
{
try
{
fis.close ();
}
catch (IOException e)
{
}
}
}
}
If you want to perform a character analysis on CA's source file—CA.java—execute java CA ca.java. You see the following output:
num letters = 609 num digits = 18 num other = 905 % letters = 39.75195822454308 % digits = 1.174934725848564 % other = 59.07310704960835
The String class contrasts with Character in that a String object stores a sequence of characters—a string—whereas a Character object stores one character. Because strings are pervasive in text-processing and other programs, Java offers two features
that simplify developer interaction with String objects: simplified assignment and an operator that concatenates strings. This section examines those features.
A java.lang.String object stores a character sequence in a character array that String's private value field variable references. Furthermore, String's private count integer field variable maintains the number of characters in that array. Each String has its own copy of those fields, and Java's simplified assignment shortcut offers the easiest way to create a String and store a string in the String's value array, as the following code demonstrates: