/**
* 字符串的特点:
* 1.字符串地内容永不可变【*】
* 2.正是因为字符串不可变,所以字符串是可以共享使用得
* 3.字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。
* 创建字符串得常见3+1种方式
* 三种构造方法:
* public String(); 创建一个空白字符串,不含有任何内容。
* public String(char[] array); 根据字符数组的内容,来创建对应的字符串。
* public String(byte[] array); 根据字节数组的内容,来创建对应的字符串。
*
* 一种直接创建:
* String str = "HelloWorld";
* 【注】直接写上双引号就是字符串对象。
*/
public class DemoString {
public static void main(String[] args) {
//空参构造
String string1 = new String();
System.out.println("第一个字符串为:" + string1);
//字符数组创建字符串
char[] charArray = new char[]{'A', 'B', 'C', 'D'};
String string2 = new String(charArray);
System.out.println("第二个字符串为:" + string2);
//字节数组创建字符串
byte[] byteArray = {97, 98, 99, 100};
String string3 = new String(byteArray);
System.out.println("第三个字符串为:" + string3);
//直接创建
String str = "HelloWorld";
System.out.println("第四个字符串为:" + str);
}
}
* 字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。、
* 对于基本类型来说,==是进行数值的比较。
* 对于引用类型来说,==是进行地址值的比较。
public class DemoStringPool {
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
char[] charArray = {'a','b','c'};
String str3 = new String(charArray);
System.out.println(str1==str2); //true
System.out.println(str1==str3); //false
System.out.println(str2==str3); //false
//双引号直接写的在字符串在常量池当中,new的不在池当中。
}
}
内存图解释:
2.字符串的相关比较方法:
* ==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法。、
* public boolean equals(Object obj):参数可以是任何对象,只有参数是一个字符串并且内容
* 相同的才会是true;否则返回false
* 【注意】
* 1.任何对象都能用Object进行比较。
* 2.equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样
* 3.如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
* 推荐:"abc".equals(str)
* 不推荐:str.equals("abc")
public class DemoStringEquals {
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));
System.out.println(str2.equals(str3));
System.out.println(str1.equals(str3));
System.out.println(str3.equals("Hello"));
System.out.println("Hello".equals(str1));
String str4 = "hello";
System.out.println(str1.equals(str4));
System.out.println("============================");
// String str5 = "abc";
// String str5 = null;
// System.out.println("abc".equals(str5)); //推荐 flase
// System.out.println(str5.equals("abc"));
//不推荐 报错 空指针异常NullPointerException
String strA = "Java";
String strB = "java";
System.out.println(strA.equals(strB)); //区分大小写的
System.out.println("---------------------------------");
System.out.println(strA.equalsIgnoreCase(strB)); //忽视大小写的
}
}
3.字符串对当中的相关获取方法:
/**
* String 当中与获取相关的常用方法:
*
* public int length()返回此字符序列的长度。
* 该长度是序列中的 16 位 char 数。
*
* char charAt(int index)返回指定索引的 char 值。
* 索引范围是从零到 length() - 1。对于数组索引,序列的第一个 char 值是索引零,
*
* public String concat(String str)将指定字符串连接到此字符串的结尾。
* 如果参数字符串的长度为 0,则返回此 String 对象。
* 否则,创建一个新的 String 对象,
* 用来表示由此 String 对象表示的字符序列和参数字符串表示的字符序列连接而成的字符
*
* public int indexOf(String str):查找参数字符串在本字符串当中首次出现的索引位置,
* 如果没有返回-1值。
*/
package 字符串;
/**
* @Author: Jason
* @Date: 2019/6/17 21:44
* @Version 1.0
*/
public class DemoStringGet {
public static void main(String[] args) {
//获取字符串的长度
int length = "kjdshkjhkjfkdskluyew902kjhk2h3".length();
System.out.println("字符串的长度是:" + length);
System.out.println("========================" );
//拼接字符串
String str1 = "Hello";
String str2 = "World!";
String str3 = str1.concat(str2);
System.out.println("拼接的字符串为:" + str3);
System.out.println("=======================" );
//获取指定索引的位置的单个字符
char ch1 = "HelloJason".charAt(5);
System.out.println("在5号索引位置的字符元素是:" + ch1);
//查找参数字符串在本来字符串文本中第一次出现的索引位置
//如果根本没有就返回-1。
String original = "Hello I am Jason";
int index = original.indexOf("I" );
System.out.println("第一次出现的索引值为:" + index);
int index1 = original.indexOf("A" );
System.out.println("第一次:" + index1); //-1
}
}
4.字符串的截取方法:
/**
* 字符串的截取方法:
*
* public String substring(int index):
* 截取从参数位置一直到字符串末尾,返回新的字符串。
*
* public String substring(int begin,int end):
* 截取从begin开始,一直到end结束,中间的字符串。
*
*
*【备注】[begin,end),包含左边,不包含右边。
*
*/
package 字符串;
/**
* @Author: Jason
* @Date: 2019/6/17 23:00
* @Version 1.0
*/
public class DemoSubstring {
public static void main(String[] args) {
String str1 = "Hello! Jason";
String str2 = str1.substring(6);
System.out.println(str1);
System.out.println(str2);
System.out.println("======================");
String str3 = str1.substring(2,8);
System.out.println(str3);
System.out.println("========================");
String strA = "Hello";
System.out.println(strA);
strA = "JAVA"; //只是地址值改变了 strA存的是地址值。
//本来是Hello的0x666 变成了JAVA的0x999
//字符串的内容是没有改变的
System.out.println(strA);
}
}
5.String当中与转换相关的常用方法有:
/**
* String当中与转换相关的常用方法有:
* <p>
* public char[] toCharArray(); 将当前字符串拆分成字符数组作为返回值。
* public byte[] getByte(); 获取当前字符串底层的字节数组。
* public String replace(CharSequence oldString, CharSequence newString):
* 将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。
* <p>
* 【备注】:CharSequence意思就是说可以接受字符串类型。
*/
package 字符串;
/**
* @Author: Jason
* @Date: 2019/6/17 23:22
* @Version 1.0
*/
public class DemoStringConvert {
public static void main(String[] args) {
//转换成为字符数组
char[] chars = "Hello".toCharArray();
System.out.println(chars[0]);
System.out.println(chars.length);
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 = "Hello Jason ! I am so happy!";
String str2 = str1.replace("o","#");
System.out.println(str1); //不变
System.out.println(str2); //替换了
System.out.println("==============================");
//如我们玩的王者荣耀里骂人的话 替换
String ma1 = "你是猪嘛!垃圾!傻逼!";
String ma2 =ma1.replace("猪","*");
String ma3 = ma2.replace("垃圾","**");
String ma4 = ma3.replace("傻逼","##");
System.out.println(ma4);
}
}
6.分割字符串的方法:
/**
* 分割字符串的方法:
* public String[] split(String regex);
* 按照参数的规则,将字符串切分成若干部分
*
* 【注意】:
*
* split方法的参数其实就是一个“正则表达式”,之后学习。
* 现在注意:如果按照英文句点“.”进行切分,必须写“\\.”(两个反斜杠)
*/
package 字符串;
/**
* @Author: Jason
* @Date: 2019/6/17 23:53
* @Version 1.0
*/
public class DemoStringSplit {
public static void main(String[] args) {
String str1 = "aaa,bbb,ccc,ddd";
String[] array1 = str1.split("," );
System.out.println(array1.length);
for (int i = 0; i < array1.length; i++) {
System.out.println(array1[i]);
}
System.out.println("====================" );
//空格也可以 但是"."不行
String str2 = "QQQ.WWW.RRR";
String[] array2 = str2.split("." );
System.out.println(array2.length);
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i]);
}
System.out.println("===========================");
//如果按照英文句点“.”进行切分,必须写“\\.”(两个反斜杠)
String str3 = "JJJ.XXX.GGG";
String[] array3 = str3.split("\\.");
System.out.println(array3.length);
for (int i = 0; i < array3.length; i++) {
System.out.println(array3[i]);
}
}
}