在字符串操作中,底层大量使用了Character类,在日常开发中,也经常用到如:toTitleCase、isSpaceChar、toUpperCaseCharArray等方法,以下就以简单实例来展示Character类的使用。
实例中同时用到Scanner类,使用此类时要注意以下几点:
1、next方法只能获取非空信息:从第一个非空字符开始获取,直到空字符结束(\t、\r、\f、空格等空字符)
2、代码中有多个Scanner实例,但只能在主方法用完后关闭输入流,原因在后面的博文中介绍
package com.javademo.datatype;
import java.io.PrintStream;
import java.util.Scanner;
/**
* Character类使用示例
* @author 王刚
*/
public class CharacterDemo {
static PrintStream out = System.out;
String strPrompt = "请输入字符(直接回车返回菜单):";
public static void main(String[] args) {
CharacterDemo charDemo = new CharacterDemo();
String strMenu = "****************************" +
"\n* 1:大小写转换" +
"\n* 2:输出ASSIC码和十进制数值" +
"\n* 3:与前一输入是否相等" +
"\n* 4:是否是空字符" +
"\n* 5:是否可组成java标识符,是否可作为java标识符的首字母" +
"\n* 其它:退出" +
"\n*****************************";
out.println(strMenu);
Scanner sc = new Scanner(System.in);
int in = sc.nextInt();
while(true){
switch (in){
case 1:
charDemo.caseInterchange();
break;
case 2:
charDemo.printAssicAndNum();
break;
case 3:
charDemo.equalPre();
break;
case 4:
charDemo.isWhitespace();
break;
case 5:
charDemo.legitimacy();
break;
default:
sc.close();
System.exit(0);
}
out.println(strMenu);
in = sc.nextInt();
}
}
/**
* description:
* isLowerCase方法:判断字符是否是小写,是小写返回true
* toUpperCase方法:将字符转换成大写
* toLowerCase方法:将字符转换成小写
*/
public void caseInterchange(){
Scanner sc = new Scanner(System.in);
Character ch = null;
String strIn = null;
out.println(strPrompt);
while(true){
strIn=sc.nextLine();
if(null == strIn || "".equals(strIn)){
break;
}
ch = strIn.charAt(0);
if(!Character.isLetter(ch)){
out.println("要进行大小写转换的字符必须是a-z或A-Z的字母");
}else {
char result = Character.isLowerCase(ch) ? Character.toUpperCase(ch) : Character.toLowerCase(ch);
out.println(result);
}
out.println(strPrompt);
}
}
/**
* description:
* isDigit方法:判断是否是数字
* isLetter方法:判断是否是字符
* getNumericValue方法:获取字符对应的十进制数
*/
public void printAssicAndNum(){
Scanner sc = new Scanner(System.in);
Character ch = null;
String strIn = null;
out.println(strPrompt);
while(true){
strIn=sc.nextLine();
if(null == strIn || "".equals(strIn)){
break;
}
ch = strIn.charAt(0);
boolean isNum = Character.isDigit(ch) || Character.isLetter(ch);
out.printf("字符%c的ASSIC码是:%d, 十进制数值是:%d\n", ch, (int)ch, isNum? Character.getNumericValue(ch):-1);
out.println(strPrompt);
}
}
/**
* Description:
* ASSIC码转字符:(char)64
* 字符转ASSIC码:(int)'c'
* valueOf方法:将char字符转换成Character
*/
public void equalPre() {
Scanner sc = new Scanner(System.in);
Character oldCh = null;
Character ch = null;
int in = -1;
out.println("请输入字符的ASSIC码");
while(true){
in = sc.nextInt();
if(-1 == in){
break;
}
ch = Character.valueOf((char)in);
if (null != oldCh) {
if (ch.equals(oldCh)) {
out.println("与前一字符相同");
} else {
out.println("与前一字符不相同");
}
}
oldCh = ch;
out.println("请输入字符的ASSIC码");
}
}
/**
* description:
* isWhitespace方法:判断字符是否为\t、\r、\f、空格等空字符
* 注:
* Scanner的next方法无法空字符,nextLine方法无法获取本次输入的回车符,但可能会上次输入的回车符
*/
public void isWhitespace(){
Scanner sc = new Scanner(System.in);
String strIn = null;
out.println(strPrompt);
while(true){
strIn=sc.nextLine();
if(null == strIn || "".equals(strIn)){
break;
}
out.println(Character.isWhitespace(strIn.charAt(0)));
out.println(strPrompt);
}
}
/**
* Description:
* isJavaIdentifierStart方法:判断是否可以作为标识符的首字符
* isJavaIdentifierPart方法:判断是否可以作为标识符首字符外的其它字符
*/
public void legitimacy(){
Scanner sc = new Scanner(System.in);
Character ch =null;
String strIn = null;
out.println(strPrompt);
while(true){
strIn=sc.nextLine();
if(null == strIn || "".equals(strIn)){
break;
}
ch = strIn.charAt(0);
boolean isIdentifierStart = Character.isJavaIdentifierStart(ch);
boolean isIdentifierPart = Character.isJavaIdentifierPart(ch);
out.printf("%c是否可做标识符的首字母:%b,是否可做标识的其它部分:%b\n", ch, isIdentifierStart, isIdentifierPart);
out.println(strPrompt);
}
}
}