String的基本特征
String 的父类是Object
String 的类是final类,不能被继承
String 的底层是由final char[] 组成成,是一个常量不可变化
String 是不可变是指当前的字符串不能发生任何变化,如果对当前字符串作出了任何的操作都会产生一个新的字符串对象
String字符串是可变的吗?
- String str1 = "hello";
- String str2 = "hello";
- String str3 = new String("hello");
- String str4 = new String("hello");
- System.out.println("str1==str2 "+(str1==str2)); // true
- System.out.println("str2==str3 "+(str2==str3));// false
- System.out.println("str3==str4 "+(str3==str4));// false
- System.out.println("str3.equest(str4) "+(str3.equals(str4)));// true
分析:
String str1 = "hello";先去常量池中去找一个hello的常量,如果没有hello这个常量,就会创建一个hello常量对象出来,如果去常量池中找,存在hello这个常量对象,把常量对象的内存地址给接受的变量。
new String("hello");这种创建方式,也要去常量池中去找一个叫hello的常量,只拷贝常量池的中值,而不去引用常量池中的内存地址,new String("hello")在堆中有内存地址,那么只要拷贝常量值到堆中内存中去即可,如果常量池中没有hello这个常量那么就去创建一个hello常量对象,也只是拷贝值到堆中内存中去
在字符串中如果使用equals判断,任何两个字符串只要内容相同都返回true;
如果使用==判断相等 ,连个字符串直接付值会返回true;
字符串常量池
池就是一个容器。
常量池是一个存放常量的容器
字符串常量池是一个存放字符串常量的容器
方法
String
(byte[] bytes)
bytes数组转换新的string
byte[] bytes = "我爱中国,中国是美丽的强国".getBytes();
//getByte 一个字符串转化为一个字节数组byte[]的方法
String string = new String(bytes);
System.out.println(string);
String
(char[] value)
一个个字符的数组换新的string
字符串
value
是字符串的初始值,初始值是从0开始
- char[] chars = {'我','爱','你','中','国'};
- String string1 = new String(chars);
- System.out.println(string1);
- String string = new String(chars,1,3);
- System.out.println(string);//爱你中
String
(char[] value, int offset, int count)
charAt
(int index)
字符串在此字符串中第一次出现处的索引
- String str = "乱花渐欲迷人眼,浅草才能没马蹄。";
- char charAt = str.charAt(1);
- System.out.println(charAt);//花
compareTo
(String anotherString)
字符串的长度相同,字符内容都相等,则认为这两个字符串是相等
这两个字符串相等,则结果为 0,如果这两个字符串不相等,则结果为 正负数
- String str1 = "银烛秋光冷画屏,";
- String str2 = "轻罗小扇扑流萤。";
- System.out.println(str1.compareTo(str2));//1403
- String str3 = "采菊东篱下,悠然见南山";
- String str4 = "采菊东篱下,悠然见南山";
- System.out.println(str3.compareTo(str4));//0
String(String original)
concat
(String str)
表示的字符序列和参数字符串表示的字符序列连接而成的字符序列
- String str1 = "中共";
- String concat = str1.concat("十九大");
- System.out.println(concat);//中共十九大
contains(CharSequence s)
字符串包含指定的 char 值序列时,返回 true,否则返回 false
- String str1 = "山气日夕佳,飞鸟相与还";
- System.out.println(str1.contains("山"));//true
- System.out.println(str1.contains("见"));//false
copyValueOf
(char[] data)
定数组中表示该字符序列的 String
- char[] chars = {'月','落','乌','啼','霜','满','天'};
- String valueOf = String.valueOf(chars);
- System.out.println(valueOf);//月落乌啼霜满天
indexOf
(int ch)
字符串中第一次出现处的索引
如果此字符串中没有这样的字符,则返回 -1
如果此字符串中有这样的字符,则返回 0
String value="凤姐姐我爱你,凤姐姐我想你";
System.out.println(value.indexOf("凤姐姐"));//0
System.out.println(value.indexOf("中"));//-1
lastIndexOf
(int ch)
返回指定字符在此字符串中最后一次出现处的索引
- String str4 = "采菊东篱下,悠然见南山";
- System.out.println(str4.lastIndexOf("山"));
endsWith
(String suffix)
getBytes
()
String
转换一个新的 byte 数组
String value="凤姐姐,我爱你";
byte[] bytes = value.getBytes();
String string = new String(bytes);
System.out.println(string);
length
()
返回此字符串的长度
数组中 length是属性,字符串中length是方法
- String value="abcdefgabc";
- System.out.println(value.length());
- String[] strings = {"a","c"};
- System.out.println(strings.length)
isEmpty
length()为 0 时返回 true 否则返回ture
- String s="江枫渔火对愁眠";
- String s1="";
- System.out.println(s1.isEmpty());//true
- System.out.println(s.isEmpty());//false
startsWith
(String prefix)
subString()
截取子字符串
substring
(int beginIndex)
字符串从指定索引处的字符开始,直到此字符串末尾
String string = "一江春水向东流";
System.out.println(string.substring(3,5));
//水向
replace
(char oldChar, char newChar)
通过用 newChar 替换此字符串中出现的所有 oldChar 得到的
String v="我爱你";
System.out.println(v.replace('爱', '恨'));//我恨你
replaceAll()
替换字符串中的某一个字符串
toCharArray
()
字符串转换为一个新的字符数组
String s4 = "一江春水向东流";
char[] charArray = s4.toCharArray();
System.out.println(Arrays.toString(charArray));//[一, 江, 春, 水, 向, 东, 流]
trim
()
返回字符串的副本,忽略前导空白和尾部空
取出字符串两侧的空格
- String info = " 我爱祖国天安门 ";
- info = info.trim() + ",天安门上太阳升";
- System.out.println(info);//我爱祖国天安门,天安门上太阳升
valueOf
(char c)
返回 char
参数的字符串表示形式
int i = 100;
float f = (float) 100.0;
double d = 100.0;
String valueOf = String.valueOf(d);
System.out.println(valueOf);//100.0
split
(String regex)
给定的正则表达式来拆分此字符串
String value="a,b,c,d,e,f,g,a,b,c";
String[] split = value.split(",");
System.out.print(Arrays.toString(split));//[a, b, c, d, e, f, g, a, b, c]
for (String string : split) {
System.out.print(string);//abcdefgabc
equalsIgnoreCase
等值判断忽略大小写
- String str1 ="Hello";
- String str2 = "hello";
- System.out.println("str1.equalsIgnoreCase(str2):" + str1.equalsIgnoreCase(str2)); //true
toUpperCase() toLowerCase()
字符串大小写转换
- String info5 = "Hello";
- String info6 =info5.toUpperCase();
- String info7 = info5.toLowerCase();
- System.out.println("大写后的内容:" + info6);
- System.out.println("小写后的内容:" + info7);