学习目标:
String类方法详细讲解
学习内容:
1、value属性
了解String类的value属性:
private final char value[] ; //String类的不可变特性就是在这里体现的。
私有的 不可更改的char类型的数组。
2.String类的构造方法
掌握String类的构造方法,用于创建对象。
String str = "abc"; //该方式创建的对象存在于字符串常量池中
String str1 = new String("abc");//参数是String类型的 //该方式创建的对象存在于堆内存中,开辟了对象空间,对象的value数组中存储着a,b,c三个字符。
char[] charArray = {'a','b','c','d','e','f'};
String str2 = new String(charArray);- //参数是字符类型数组 //该方式是将字符数组中的字符都存储在新对象的value数组中。
String string1 = new String(charArray,2,5); //三个参数,第一个是给定数组,第二个是从那个索引位置开始,拿几个
System.out.println(s6);
byte[] byteArray = {1,2,3,4,5,6};
String string2 = new String(byteArray,2,4);- //参数是byte类型数组 //该方式是将byte数组中的数字都存储在新对象的value数组中。
String s2 = new String(charArray,2,5); //三个参数,第一个是给定数组,第二个是从那个索引位置开始,拿几个
System.out.println(s6);
String str4 = ""; //创建空字符串
String str5 = new String("");//创建空字符串
StringBuffer sbr = new StringBuffer();String str6 = new String(sbr); //参数是StringBuffer类型的,如果看不懂这个可以跳过,等String类学完之后学习StringBuffer自然明白。
StringBuilder sbr1 = new StringBuilder();
String str7 = new String(sbr1); //参数是StringBuffer类型的,如果看不懂这个可以跳过,等String类学完之后学习StringBuffer自然明白。
3、indexOf()
掌握String类的indexOf()方法,该方法存在方法重载,返回值为int类型。
String str = "abcdabcd";System.out.println(str.indexOf('b')); //从索引为0的位置开始找b字符 //1System.out.println(str.indexOf("bc")); //从索引为0的位置开始找bc字符串 //1System.out.println(str.indexOf("b",str.indexOf("b")+1));//从索引为0的位置开始找b字符串,然后以b字符串的索引加1的位置开始找第二个b字符串 //5System.out.println(str.indexOf('b',str.indexOf('b')+1));//从索引为0的位置开始找b字符,然后以b字符串的索引加1的位置开始找第二个b字符 //5
4、LastIndexOf()
掌握String类的LastIndexOf()方法,该方法存在方法重载,返回值为int类型。
System.out.println(str.lastIndexOf('b'));//从索引为str.length-1的位置开始从尾到头找b字符,找到后返回其索引 //5System.out.println(str.lastIndexOf("bc"));//从索引为str.length-1的位置开始从尾到头找bc字符串,找到后返回其索引 //5System.out.println(str.lastIndexOf("b",str.lastIndexOf("b")-1));//从索引为str.length-1的位置开始从尾到头找b字符串,然后用其索引-1的位置开始继续从尾到头找第二个b字符串 //1System.out.println(str.lastIndexOf('b',str.lastIndexOf('b')-1));//从索引为str.length-1的位置开始从尾到头找b字符,然后用其索引-1的位置开始继续从尾到头找第二个b字符 //1
5.startsWith()
掌握String类的startsWith() //是否以某字符串开头 //返回值为boolean类型。
String str = "abcdabcd";
System.out.println(str.startsWith("abcd")); //true
System.out.println(str.startsWith("dcba")); //false
6.endsWith()
掌握String类的endsWith() //是否以某字符串开头 //返回值为boolean类型。
String str = "abcdabcd";
System.out.println(str.endsWith("abcd")); //true
System.out.println(str.endsWith(".java")); //false
7.contains()
掌握String类的contains() //是否存在某参数字符串存在于给定字符串中 //返回值为boolean类型
String str = "abcdabcd";
System.out.println(str.contains("bc")); //true
System.out.println(str.contains("da")); //true
System.out.println(str.contains("gg")); //false
8.substring()
掌握String类的substring() //截取字符串 存在方法重载 有返回值,返回的是截取的字符串。
String str = "abcdabcd";
String str1 = "emo01.java";
System.out.println(str.substring(0)); //截取字符串,从索引为0开始截取到完
System.out.println(str1.substring(5)); //截取字符串,从索引为5开始截取到完
System.out.println(str1.substring(0,6)); //截取字符串,从索引为0开是截取到到给定的第二个参数减1的位置为止,即[0,6),左闭右开区间//看懂上面的不妨自己解读一下下面的命令执行步骤是什么样子的,会输出什么结果。
System.out.println(str.startsWith(str.substring(str.indexOf('a'),str.indexOf('a',str.indexOf('a') + 1))));
System.out.println(str.endsWith(str.substring(str.indexOf('a'),str.indexOf('a',str.indexOf('a') + 1))));
9.trim()
掌握String类的trim();//去掉字符串首部和尾部的空白字符 有返回值,返回的是除掉首部和尾部的空白字符的字符串
String str = "abcdabcd";
String line =" \t\n\r a b\tc "; //\r是回车 \t制表符,\n换行
System.out.println(line);
System.out.println(str.length());
line = line.trim();
System.out.println(line+"字符串长度为:"+line.length());
10.isEmpty()
掌握String类的isEmpty() //判断字符串是否为空 返回值是布尔类型
String str2 = null; //尚未开辟对象空间
String str3 = ""; //空字符串
String str4 = "abc";
//System.out.println(str2.equals("")); //这里会出现NullPointerException 空指针异常,对象为空,还拿来用
System.out.println(str3.equals("")); //true//建议使用下面的这种方式去比较(避免产生空指针异常)
System.out.println("".equals(str2)); //false
System.out.println("".equals(str3)); //true
System.out.println(str4.isEmpty()); //false
11.replace()
掌握String类的replace() //替换字符或者字符串,存在方法重载,有返回值,返回值为替换后的新字符串
String str5 = "唧唧复唧唧,木兰当户织";
System.out.println(str5.replace("唧唧","叽叽")); //参数列表为(旧字符串,新字符串) 原字符串中出现给定的旧字符串全部替换成了新字符串。
System.out.println(str5.replace('唧','叽')); //参数里表为(旧字符,新字符)原字符串中出现给定的旧字符串全部替换成了新字符串。
System.out.println(str5); //str5的引用地址并没有改变
12.replaceAll()
掌握String类的replaceAll() //替换所有满足规则的子字符串,参数为(String regex, String replacement),用给定的替换规则与给定的 替换元素匹配的此字符串的每个符合规则的被替换子字符串。
String str6 = "abcd\"e1.fghi?j2klm,n3o4p5q6rs7tuvwx8yz";
System.out.println(str6.replaceAll("[0-9&?\",.]+",""));
String str7 = "\"You\" (or \"Your\") sha1ll mean; an individu2al,or Legal En4tity exercisin9g. permissions granted by this License.";
System.out.println(str7.replaceAll("[0-9&?\",.;]",""));
13.replaceFirst()
掌握String类的replaceFirst() //替换满足规则的第一个子字符串,参数为(String regex, String replacement)
String str6 = "abcd\"e1.fghi?j2klm,n3o4p5q6rs7tuvwx8yz";
String str7 = "\"You\" (or \"Your\") sha1ll mean; an individu2al,or Legal En4tity exercisin9g. permissions granted by this License.";
System.out.println(str6.replaceFirst("[0-9&?\",.]+","")); //abcde1.fghi?j2klm,n3o4p5q6rs7tuvwx8yz
System.out.println(str7.replaceFirst("[0-9&?\",.;]","")); //You" (or "Your") sha1ll mean; an individu2al,or Legal En4tity exercisin9g. permissions granted by this License.
14.split()
掌握String类的split() 切割字符串,按照给定的规则进行切割
String str8 = "熔岩巨兽-暗夜猎手-赏金猎人-暴走萝莉";
String[] result = str8.split("-"); //
for (String hero : result) {System.out.println(hero);
}
System.out.println("Arrays.toString(result)")
String str9 = "熔岩巨兽#+暗夜猎手#+赏金猎人#+暴走萝莉";
String[] result = str8.split("#\\+"); //
for (String hero : result) {System.out.println(hero);
}
/*
熔岩巨兽
暗夜猎手
赏金猎人
暴走萝莉
*/
System.out.println("Arrays.toString(result)") //[熔岩巨兽, 暗夜猎手, 赏金猎人, 暴走萝莉]
15. “+拼接字符串”
掌握String类的特性://+号拼接字符串
String st = "123";
System.out.println(st+"中国我爱你");
System.out.println(5+3+""+4+3); //明白和字符串用+是拼接变为字符串//857
16.length()
掌握String类的length()方法//获取字符串的长度
String str1 = "abc";
String str2 = "abcdefg";
System.out.println(str1.length()); //3
System.out.println(str2.length()); //7
System.out.println(String.valueOf(Runtime.getRuntime()).length()); //26
17.将String类型转换为其他类型
将String类型转换为其他类型
String num = "123.456";
System.out.println(Integer.parseInt(num)); //如果执行这一句,会出现NumberFormatException数字格式化异常
System.out.println(Double.parseDouble(num)); //123.456
String s2 = "true";
System.out.println(Boolean.parseBoolean(s2));//true
String s3 = "false";
System.out.println(Boolean.parseBoolean(s3));//false
18.charAt()
掌握String类charAt(),获取指定索引位置的字符,返回值是char类型
索引因该是大于等于0,小于等于length()-1的数。
String s7 = "abc";
System.out.println(s7.charAt(2));
System.out.println(s7.charAt(3)); //StringIndexOutOfBoundsException: String index out of range: 3
19.codePointAt()
掌握String类codePointAt(),获取指定索引位置的字符对应的Unicode码,返回值是byte类型
索引因该是大于等于0,小于等于length()-1的数。
这里需要注意的是byte类型只能装下-128 - 127的数字,大于127的数字存储进来会产生乱码。
String s7 = "abc";
System.out.println(s7.codePointAt(2));
System.out.println(s7.codePointAt(3)); //StringIndexOutOfBoundsException: String index out of range: 3
20.toCharArray()
掌握String类的toCharArray() 方法 //将字符串转化为字符数组
String s7 = "巴山楚水凄凉地";
char[] charArray = s4.toCharArray();
System.out.println(charArray); //只有字符数组可以这样输出,整型浮点型数组包括其他自创的引用类型数组都不可以。
21.getBytes()
掌握String类的getBytes()方法 //将字符串转化为byte数组,eclipse编辑器默认该方法使用的是Unicode编码。
String st = new String("abcdefg");
byte[] array = st.getBytes(StandardCharsets.UTF_8);
System.out.println(Arrays.toString(array)); //[97, 98, 99, 100, 101, 102, 103]
String st1 = new String("中国我爱你");
byte[] array1 = st1.getBytes(StandardCharsets.UTF_8); //UTF_8认为中文是三个字节
System.out.println(Arrays.toString(array1)); //[-28, -72, -83, -27, -101, -67, -26, -120, -111, -25, -120, -79, -28, -67, -96]//产生这个结果是因为byte数组只能存下-128 - 127的数字。
22.toUpperCase()
掌握String类的toUpperCase()方法,将字符串中所有的小写字母转换成大写字母。
String s8 = "abc";
System.out.println(s8.toUpperCase()); //ABC
23.toLowerCase()
掌握String类的toLowerCase()方法,将字符串中所有的大写字母转换成小写字母。
String s9 = "ABC";
System.out.println(s9.toLowerCase()); //abc
24.concat()
掌握String类的concat()方法,用于字符串的拼接,参数是String类型。
String st9 = "abc";
System.out.println(st9.concat(st9)); //abcabcSystem.out.println(st9.concat("+").concat(st9)); //abc+abc
25.valueOf()
掌握String类的valueOf()静态方法,它将其他类型转换成String类型 存在很多方法重载
System.out.println(String.valueOf(5)); //将int类型转换为String类型
System.out.println(String.valueOf(Runtime.getRuntime())); //Runtime.getRuntime()是创建了一个Runtime类型的对象,然后将该对象转换成Stringl类型
26.format()
掌握String类的format()静态方法 //作用用于格式化连接字符串
String[] valueArray = {"圣枪游侠","复仇之矛","赏金猎人","暗夜猎手","荣耀行刑官","厄非琉斯"};
System.out.println(String.format("射手1:%s 射手2:%s 射手3:%s 射手4:%s 射手5:%s 射手6:%s ",valueArray));
System.out.println(String.format("射手1:%s 射手2:%s 射手3:%s 射手4:%s ",valueArray));
27.join()
掌握String类的join()静态方法 拼接字符串 参数列表(CharSequence delimiter, CharSequence… elements) 存在方法重载
//join()更适合统一的分隔字符,指定的字符串
System.out.println(String.join("-",result)); //第一个参数是拼接分隔符,第二个是CharSequence类型的动态参数列表
System.out.println(String.join("+",result)); //第一个参数是拼接分隔符,第二个是CharSequence类型的动态参数列表
System.out.println(String.join(".",result)); //第一个参数是拼接分隔符,第二个是CharSequence类型的动态参数列表
28equals()
.掌握String类重写自Object类中的equals()方法。String类重写的equals方法是先比较两个对象的地址是否相同,如果不同,再比较传进来的参数对象是否是String类型,如果是,再比较两对象的value属性数组的长度是否相同,如果相同再一一对比value数组中存储的字符是否都相等,如果相等返回true,否则返回直接比较两个字符串的字面值
public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value;int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false;}
剩余方法不知道为啥不显示,请再下一篇继续阅读。感谢浏览,创作不易,一键三连哦。