字符串的特点:
创建字符串的常见3+1种方式。
三种构造方法:
一种直接创建:
String str =“Hello”;//右边直接用双引号
注意:直接写上双引号,就是字符串对象。
public class Demo01String {
public static void main(String[] args) {
//使用空参构造
String str1 = new String();//小括号留空,说明字符串什么内容都没有
System.out.println("第1个宇符串:"+str1);
//根据字符数组创建字符串
char[] charArray = {'A','B','C'};
String str2 = new String(charArray);
System.out.println("第2个字符串:"+str2);
//根据字节数组创建字符串
byte[] byteArray = {97,98,99};
String str3 = new String(byteArray);
System.out.println("第3个字符串" +str3);
//直接创建
String str4 = "Hello";
System.out.println("第4个字符串:"+str4);
}
}
字符串常量池:
程序当中直接写上的双引号字符串,就在字符串常量池中。
对于基本类型来说,==是进行基本数值的的比较。
对于引用类型来说,==是进行【地址值】的比较。
内存图:
字符串的比较相关方法:
==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法:
注意事项:
package cn.itcast.day08.demo02;
public class Demo015StringEquals {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Hello";
char[] charArray = {'H','e','l', 'l','o'};
String str3 = new String(charArray);
System.out.println(str1.equals(str2));//true
System.out.println(str2.equals(str3)];//true
System.out.println(str3.equals("He1lo"));//true
System.out.println("Hello".equals(str1));//true
string str4="hello";
System.out.println(str1.equals(str4));//false
System.out.println("==========");
String str5 = null;
System.out.println("abc".equals(str5));//推荐:false
//System.out.println(str5.equals("abc"));//不推荐,报错,空指针异常NullPointerException
System.out.println("==========");
String strA = "Java";
String strB = "java";
System.out.println(strA.equals(strB));//false,严格区分大小写
System.out.println(strA.equalsIgnoreCase(strB));//true,忽略大小写
//注意,只有英文字母区分大小写,其他都不区分大小写
System.out.println("abc一123".equalsIgnoreCase(anotherString:"abc壹123"));//false
}
}
字符串的获取相关方法:
public int length():获取字符串当中含有的字符个数,拿到字符串长度。
public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串。
public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始)
public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。
package cn.itcast.day08.demo02;
public class Demo08StringGet {
public static void main(String[] args) {
//获取字符串的长度
int length = "asdasfeutrva".length();
System.out.println("字符串的长度是:"+length);
//拼接字符串
String str1 ="Hello";
String str2 = "Wor1d";
String str3 = str1.concat(str2);
System.out.println(str1);//Hello,原封不动
System.out.println(str2);//Horld,原封不动
System.out.println(str3);//HelloWorld,新的字符串
System.out.println("===========");
//获取指定索引位置的单个字符
char ch = "Hello".charAt(1);
System.out.println("在1号索引位置的字符是:"+ch);
System.out.println("==========");
//查找参数字符串在本来宇符串当中出现的第一次索引位置
//如果根本没有,返回-1值
String original = "HelloWrldHelloWor1d";
int index = original.indexOf("110");
System.out.println("第一次索引值是:" +index);//2
System.out.println("HelloWorld".indexOf("abc"));//-1
}
}
字符串的截取方法:
package cn.itcast.day08.demo02;
public class Demo03Substring {
public static void main(String[] args) {
String strl = "HelloWorld";
String str2 = str1.substring(5);
System.out.println(str1);//HelloWorld,原封不动
System.out.println(str2);//World,新宇符串
System.out.println("=========");
String str3 = str1.substring(4,7);
System.out.println(str3);//oWo
System.out.println("=========");
//下面这种写法,宇符串的内容仍然是没有改变的
//下面有两个字符串,“Hello","Java"
//str4当中保存的是地址值。
//本来地址值是Hello的0x666,
//后来地址值变成了Java的0x999
String strA="Hello";
System.out.println(strA);//Hello
strA="Java";|I
System.out.println(strA);//Java
}
}
String当中与转换相关的常用方法有:
package cn.itcast.day08.demo02;
public class Demo04StringConvert {
public static void main(String[] args) {
//转换成为字符数组
char[] chars = "Hello".toCharArray();
System.out.println(chars[0]);//H
System.out.println(chars.length);//5
System.out.println("==========");
//转换成为字节数组
byte[] bytes="abc".getBytes();
for (int i = 0;i<bytes.length;i++) {
System.out.println(bytes[i]);
}
System.out.println("============");
//字符串的内容替换
String str1 = "How do you do?";
String str2 = str1.replace("o","*");
System.out.println(str1);//How do you do?
System.out.println(str2);//H*w d* y*u d*?
System.out.println("==========");
String lang1 = "会不会玩儿呀!你大爷的!你大爷的!!你大爷的!!!";
String lang2 = lang1.replace("你大爷的","****");
System.out.println(lang2);//会不会玩儿呀!****!****!!****!!!
}
}
分割字符串的方法:
package cn.itcast.day08.demo02;
public class Demo05StringSplit{
public static void main(String[] args) {
String str1="aaa,bbb,ccc";
String[] array1 = str1.split(",");
for(int i=0;i<array1.length;i++) {
System.out.println(array1[i]);
}
System.out.println("==========");
String str2 = "aaa bbb ccc";
String array2 = str2.split(" ");
for (int i=0;i<array2.length;i++) {
System.out.println(array2[i]);
}
System.out.println("===========");
String str3="XXX.YYY.ZZZ";
String [] array3 = str3.split("\\.");
System.out.println(array3.length);//0
for (int i=0;i<array3.length;i++) {
System.out.println(array3[i]);
}
}
}
packagecn.itcast.day08.demo03;
public class Demo02StaticMethod {
public static void main(String[] args) {
MyClass obj = new MyClass();//首先创建对象
//然后才能使用没有static关键字的内容
obj.method();
//对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称来调用。
obj.methodStatic();//正确,不推荐,这种写法在编译之后也会被javac翻译成为“类名称.静态方法名”
MyClass.methodStatic();//正确,推荐
//对于本来当中的静态方法,可以省略类名称
myMethod();
Demo02StaticMethod.myMethod();//完全等效
}
public static void myMethod() {
System.out.println("自己的方法!");
}
}
========================================
package cn.itcast.day08.demo03;
public class MyClass {
int num;//成员变量
static int numStatic;//静态变量
//成员方法
public void method() {
System.out.println("这是一个成员方法。");
//成员方法可以访问成员变量
System.out.println(num);
//成员方法可以访问静态变量
System.out.println(numStatic);
}
//静态方法
public static void methodStatic() {
System.out.println("这是一个静态方法。");
//静态方法可以访问静态变量
System.out.println(numStatic);
//静态不能直接访问非静态【重点】
//System.out.println(num);//错误写法!
//静态方法中不能使用this关键字。
//System.out.println(this);//错误写法!
}
}
public class 类名称 {
static {
//静态代码块的内容
}
}
package cn.itcast.day08.demo03;
public class Person {
static {
System.out.println("静态代码块执行!");
public Person() {
System.out.println("构造方法执行!");
}
}
========================================
public class Demo04Static {
public static void main(String[] args) {
Person one = new Person();
Person two = new Person();
}
}
数组工具类Arrays:
package cn.itcast.day08.demo04;
import java.util.Arrays;
public class Demo01Arrays {
public static void main(String[] args) {
int[] intArray = {10,20,30};
//将int[]数组按照默认格式变成字符串
String int Str = Arrays.toString(intArray);
System.out.println(intStr);//[10,20,30]
int[] array1={2,1,3,10,6};
Arrays.sort(array1);
System.out.println(Arrays.toString(array1));//[1,2,3,6,10]
String[] array2={"bbb","aaa","ccc"};
Arrays.sort(array2);
System.out.println(Arrays.toString(array2));//[aaa,bbb,ccc]
}
}
例题:
题目:
请使用Arrays相关的API,将一个随机字符串中的所有字符升序排列,并倒序打印。
package cn.itcast.day08.demo04;
import java.util.Arrays;
public class Demo02ArraysPractise { I
public static void main(String[] args) {
String str = "asv76agfqwdfvasdfvjh";
cahr[] chars = str.toCharArray();
Arrays.sort(chars);//对字符数组进行升序排列
//需要倒序遍历
for (int i=chars.length-1; i>=0;i--) {
System.out.println(chars[i]);
}
}
}
数学工具类Math: