字符数据类型char
字符数据类型char用于表示单个字符
java中char通过Unicode值去比较两个字符的大小,也是通过Unicode值去判断字符是数字、字母还是其他
输入输出字符:
char ch2;
ch2 = input.nextLine().charAt(0);
System.out.println(ch2);
Character类一些字符的相关方法
Character.isDigit(ch) //如果ch是数字,返回true
Character.isLetter(ch) //如果ch是字母,返回true
Character.isLetterOrDigit(ch) //如果ch是数字或字母,返回true
Character.isLowerCase(ch) //如果ch是小写字母,返回true
Character.isUpperCase(ch) //如果ch是大写字母,返回true
Character.toLowerCase(ch) //将字符转换成小写字母
Character.toUpperCase(ch) //将字符转换成大写字母
String类
String不是基本数据类型,而是一个引用类型,是Java库中一个预定义的类,java.lang.String。(java.lang里面的类都不用特意去写import,编译器自动引用了)
任何Java类都可以作为引用类型来声明一个变量。
一、字符串的构造
用String类来构造字符串:
1、用字符串字面值来创建:
String message = new String("Welcome to Java");
new String()开辟了一个空间,里面储存String对象"Welcome to Java",然后定义一个String变量message去对String对象进行引用,也就是说message里存储的是String对象的地址。
为了简单起见,经常使用术语“字符串”来表示String变量、String对象和字符串值
也可以将字符串字面值看做一个String对象,直接赋值给String变量。(java里只有值传递,此处的赋值指的是将地址值传递过去)
String message = "Welcome to Java";
这里"Welcome to Java"称作驻留字符串,可以理解为字符串中的常量,因为String对象是不可变的,内容不能被改变。
如果通过 message = "Java";来改变String对象的内容是不正确的,该条语句只会新开辟一个空间储存新的String对象"Java",
然后引用赋值给message,使message不再指向原来的"Welcome to Java"
String message1 = "Welcome to Java";
String message2 = new String("Welcome to Java");
这里message==message1(都是驻留字符串"Welcome to Java"的地址),
而!=message2(它开辟了一个新的空间,尽管内容相同但地址不同)
2、用字符数组创建:
char[] charArray = {'G','o','o','d',' ','D','a','y'};
String message = new String(charArray);
二、输入输出字符串
next():读取到空白字符结束
nextLine(): 读取到回车键结束
String s1 = input.next();
String s2 = input.nextLine();
System.out.println(s1+s2);
格式化控制输出:
String s1 = "ZYL";
System.out.printf("%s"+"0416",s1);
ZYL0416
三、一些String类的方法
首先!要清楚的是java里字符串一旦创建,内容就不能改变,即String对象是不可变的!所以这些方法都是返回一个源自原始字符串的新字符串,而原始字符串没有被改变!
1、获取字符串长度length()
2、获取字符charAt(index)
字符串s下标index的取值:0~s.length()-1
3、连接字符串concat(s1)
String s3 = s1.concat(s2);
等价于String s3 = s1 + s2;
4、返回一个新字符串,所有字母大写toUpperCase()
5、返回一个新字符串,所有字母小写toLowerCase()
6、返回一个新字符串,去掉两边的空白字符trim()
7、字符串比较
s.equals(s1) 若s字符串内容等于s1字符串内容,返回true
s.equalsIgnoreCase(s1) 不分大小写比较两个字符串内容
s.compareTo(s1) s>s1返回正整数,小于返回负整数,等于返回0
s.compareToIgnoreCase(s1) 不分大小写比较字符串大小
s.startsWith(prefix) 如果字符串以特定的前缀开始,返回true
s.endsWith(suffix) 如果字符串以特定的后缀结束,返回true
s.contains(s1) 如果s1是s的子字符串,返回true
8、获得子字符串substring
返回从下标beginIndex的字符开始到字符串结尾的子字符串
substring(beginIndex)
返回从下标beginIndex到下标endIndex-1的子字符串
substring(beginIndex,endIndex)
9、查找字符或字符串indexOf
indexOf(ch) 返回第一个ch的下标,没有则返回-1
lastIndexOf(ch) 返回最后一个ch的下标
indexOf(ch,fromIndex) 返回fromIndex之后的第一个ch的下标
lastIndexOf(ch,fromIndex) 返回fromIndex之前的最后一个ch的下标
indexOf(s) 返回第一个字符串s的首字母的下标
lastIndexOf(s) 返回最后一个字符串s的首字母的下标
indexOf(s,fromIndex)
lastIndexOf(s,fromIndex)
建议indexOf和substring搭配食用更佳
10、 替换字符串replace
String message = "Welcome";
//replace(oldChar:char,newChar:char):String
System.out.println(message.replace('e','E'));
WElcomE
//replace(oldString:String,newString:String):String 或者是replaceAll
System.out.println(message.replace("Wel",""));
come
//replaceFirst(oldString: String,newString: String): String
System.out.println(message.replaceFirst("e","AB"));
WABlcome;
12、拆分字符串split
//split(delimiter: String):String[]
String[] tokens = "Java#HTML#PERl".split("#");
for(int i = 0;i<tokens.length;i++){
System.out.print(tokens[i] + " ");
}
Java HTML Perl
13、将字符串转换成数组、数值
i.将字符串转换成字符数组
toCharArray()
// toCharArray():Char[]
char[] chars = "ZYLO416".toCharArray();
for(int i = 0;i<chars.length;i++){
System.out.print(chars[i]+" ");
}
Z Y L 0 4 1 6
getChars(srcBegin:int,srcEnd:int,dst:char[],dstBegin:int):void
将字符串中下标从srcBegin到srcEnd-1的子串复制到字符数组dst中下标从dstBegin开始的位置,要保证子串复制过去之后不会超过原来字符数组的长度,否则编译错误
//getChars(srcBegin:int,srcEnd:int,dst:char[],dstBegin:int):void
char[] dst = {'J','A','V','A',*'1','3','0','1*'};
"CS*3720*".getChars(2,6,dst,4);
for(int i = 0;i<dst.length;i++){
System.out.print(dst[i]+" ");
}
J A V A 3 7 2 0
ii.将字符串转换成数值parseDouble、parseInt
Integer类中的parseInt方法将数值字符串转换成int值
Double类中的parseDouble方法将数值字符转换成double值
//Integer.parseInt(s:String,radix:int):int
//Double.parseDouble(s:String,radix:int):double
将数值字符串s按照radix进制去转换成int值:
Integer.parseInt("11") return 11; //默认按照十进制转
Integer.parseInt("11",2) return 3;
Integer.parseInt("12",8) return 10;
Integer.parseInt("13",10) return 13;
Integer.parseInt("1A",16) return 26;
Integer.parseInt("12",2)会发生运行时错误,因为12不是二进制数
另插一嘴,String类的format方法可以进行转换
//将十进制数字26转换成十六进制数1A
String.format("%x",26) return 1A;
14、将字符、字符数组或数值转换成字符串
i.直接使用字符串的连接操作符 ‘+’ 将字符或者数字转换为字符串
System.out.println("ZYL"+416+'!');
ZYL416!
ii.用构造方法String(char[])将字符数组转换成字符串
String str = new String(new char[]{'J','a','v','a'});
iii.用String类的重载静态valueOf方法
//valueOf(c:char):String
char ch = 'L';
String message2 = message.valueOf(ch);
System.out.println(message2);
L
//valueOf(data: char[]): String
char[] str = {'Z','Y','L'};
System.out.println(message.valueOf(str));
ZYL
//valueOf(d:double):String
System.out.println(message.valueOf(4.16));
4.16
//valueOf(f:float): String
//valueOf(i: int): String
//valueOf(l: long): String
//valueOf(b: boolean): String
boolean b = true;
System.out.println(message.valueOf(b));
true
15、格式化字符串format
String类包含静态方法format,可以创建一个格式化的字符串,与格式化输出printf类似
//format方法返回一个格式化的字符串
String s = String.format("%7.2f%6d%-4s",45.556,14,"AB");
System.out.println(s);
45.56 14AB
//printf方法显示一个格式化的字符串
System.out.printf("%7.2f%6d%-4s",45.556,14,"AB");
45.56 14AB
16、通过正则表达式来进行模式匹配、替换和拆分
正则表达式的学习 一些举例:
String s = "a+b$#c".replaceAll("[$+#]","NNN");
System.out.println(s);
aNNNbNNNNNNc
此处正则表达式为[KaTeX parse error: Expected 'EOF', got '#' at position 2: +#̲],指定匹配、+、#这三个符号,所以通过replace这三个符号都替换成NNN
String[] tokens = "Java,C?C#,C++".split("[,?]");
for(int i = 0;i<tokens.length;i++){
System.out.print(tokens[i]+" ");
}
Java C C# C++
此处正则表达式为[,?],指定匹配,、?这两个符号,通过split方法将字符串分割