//?char(字符):基本数据类型,仅能保存1个字符,使用单引号''包围
//String(字符串):引用数据类型,能保存0-N个字符,使用双引号""包围
? ? ? ? 字符类型char是基本数据类型,它是character的缩写。一个char保存一个Unicode字符。
? ? ? ? 每个字符都按照Unicode编码集存储,每个字符占2个字节的内存空间。
? ? ? ? 英文字母只使用1个字节(还有一个字节空闲,造成资源浪费),汉字使用2个字节。
? ? ? ? 例如:
public static void main(String[] args) {
//存储英文
char c1 = 'A';
char c11 = 65; //十进制(Unicode编码值)
System.out.println(c11); //A
//存储中文
char c2 = '中';
char c22 = 20013; //十进制(Unicode编码值)
System.out.println(c22); //中
//字符与int之间自动转换
int n1 = 'A';
System.out.println(n1); //65
int n2 = '中';
System.out.println(n2); //20013
int n3 = 'A' + 32;//计算结果为int
char n4 = 'A' + 32;//计算结果为int,自动转换成char
char n5 = (char)(c1 + 32);//计算结果为int,需要手动转换成char
}
public static void main(String[] args) {
//大小写转换
//转换为小写
char upper = 'B';
char lower = (char)(upper + 32);
System.out.println(lower);
//转换为大写
lower = 'r';
upper = (char)(lower -32);
System.out.println(upper);
//大小写反转
char c = 'c';
char ret = (char)(c>='A'&&c<='Z'?(c+32):(c-32));
System.out.printf("%s=>%s",c,ret);
}
//数字
char c1 = '3';
System.out.printf("%s是否是数字?%s\n",c1,c1 >= 48 && c1 <= 57);
System.out.printf("%s是否是数字?%s\n",c1,c1 >= '0'&& c1 <= '9');
//英文字母(大写、小写)的判断
char c1 = 'a';
System.out.printf("%s是否是英文字母?%s\n",c1,c1 >= 'A' && c1 <= 'Z' || c1 >= 'a' && c1 <= 'z');
//判断是否为中文
char c3 = '是';
System.out.printf("%s是否是汉字?%s\n",c3,c3 >= 0x4E00 && c2 <= 0x29FA5);
System.out.println((char)0x4E00);
System.out.println((char)0x29FA5);
字符串类型String是引用类型,用双引号"..."表示字符串。一个字符串可以存储0-N个字符
例如:
//String可以保存0-N个字符
String s1 = ""; //0个字符
String s2 ="ABC"; //三个字符
String s3 = "但使龙城飞将在"; //7个字符
String s4 = "唧唧复唧唧 木兰当户织"; //11个字符
//特殊字符需要用转义符\
String s5 = "除去\"巫山\"不是云"; //9个字符
String s6 = "ABC\\DEFG"; //8个字符
System.out.println(s1 + "=>" + s1.length()); //=>0
System.out.println(s2 + "=>" + s2.length()); //ABC=>3
System.out.println(s3 + "=>" + s3.length()); //但使龙城飞将在=>7
System.out.println(s4 + "=>" + s4.length()); //唧唧复唧唧 木兰当户织=>11
System.out.println(s5 + "=>" + s5.length()); //除去"巫山"不是云=>9
System.out.println(s6 + "=>" + s6.length()); //ABC\DEFG=>8
字符串的每个字符,按照顺序都拥有一个数字下标,从 0 开始。例如 : 字符串"猪八戒"中的字符"猪"的下标为 0 ,字符"八"的下标为 1 。
1.? ? ? 方法1:.length()
? ? ? ? 作用:获取字符串的长度
String password = "ertyuiopvbfghjklnm";
//密码长度
int len = password.length();
//密码是否符合要求
String msg = len >= 6 && len <=20?(len<=9?"弱":(len<=15?"中":(len<=20?"强":""))):"密码长度不符合要求";
System.out.println(msg); //强
2.? ? ?方法2:charAt()方法
????????作用:获取字符串指定位置(下标)的字符
String s1 = "大漠孤烟直,长河落日圆";
char first = s1.charAt(0);
char last = s1.charAt(s1.length()-1);
char chs4 = s1.charAt(3);
System.out.println("首字母:"+first); //首字母:大
System.out.println("尾字母:"+last); //尾字母:圆
System.out.println("第四个字符:"+chs4); //第四个字符:烟
3.? ? ?方法3:toUpperCase()或toLowerCase()
? ? ? ? 作用:转换成大写或者小写
String s2 = "IYFGIkuigiygC";
String s3 = s2.toUpperCase();
String s4 = s2.toLowerCase();
System.out.println("源字符串:"+s2); //源字符串:IYFGIkuigiygC
System.out.println("大写字符串:"+s3); //大写字符串:IYFGIKUIGIYGC
System.out.println("小写字符串:"+s4); //小写字符串:iyfgikuigiygc
4.? ? ?方法3:substring()
? ? ? ? 作用:截取字符串
String s5 = "刘德华为什么不演反派?遥遥领先";
String s6 = s5.substring(2,4);
String s7 = s5.substring(3);
System.out.println("源字符串:"+s5); //源字符串:刘德华为什么不演反派?遥遥领先
System.out.println("子字符串1:"+s6); //子字符串1:华为
System.out.println("子字符串2:"+s7); //子字符串2:为什么不演反派?遥遥领先
5.? ? ?方法4:indexOf()
? ? ? ? 作用:查找在当前字符串中“指定字符串”的 下标位置
String s8 = "asdfghj";
//如果不存在,则返回-1
int index1 = s8.indexOf("sos");
System.out.println(index1); //-1
//如果存在,则返回下标位置
int index2 = s8.indexOf("fg");
System.out.println(index2); //3
Java的编译器对字符串进行特殊处理,可以使用+连接任意字符串和其他数据类型,简化字符串的处理。
public class Text08 {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "world";
String s = s1 + " " + s2 + "!";
System.out.println(s); //Hello world!
}
}
Java的字符串除了是一个引用类型外,还有个重要特点,就是字符串不可变。
public class Text09 {
public static void main(String[] args) {
String s = "hello";
System.out.println(s); //hello
s = "world";
System.out.println(s); //world
}
}
????????首先,执行String s = "hello"; 时,JVM 虚拟机先创建字符串"hello”,然后,把字符串变量s指向它。