-DAY11-String和StringBuilder
▚▚▚该章节一些操作对于后面学习大数据有很大作用,hadoop中mapreduce经常使用这些操作
▚String概述
①String在java.lang包下,所以使用的时候不需要导包
②String类表示字符串,Java中所有的字符串文字,都是String类的实例
就是说,Java程序中所有的双引号字符串都是String类的对象
注意:
String是特殊的引用类型,常做基本类型来用
String不可变,他们的值在创建后不能被更改
String的值不可变,但是可以被共享
String相当于字符数组(char[]),但是底层原理是字节数组(byte[])
▚构造
public String() 创建一个空白的字符串对象,不含有任何内容
public String(char[] c) 根据字符数组的内容,创建字符串对象 public String(byte[] b) 根据字节数组的内容,创建字符串对象
public String(char[] c,int offset,int length) 根据char类型的数据,从offset开始,获取length个元素,创建字符串对象
String s=“abc” 直接赋值的方式创建对象
offset:偏移量,下标
▚字符串的比较".equals"
使用==作比较
基本数据类型,比较的是值是否相同
引用数据类型,比较的是地址是否相同
字符串是一个对象,想要比较值是否相同,通过方法来实现,方法为:equals();
使用方式:(之前用过很多次)
String对象1.equals(String对象2)
范例:
s.equals(s1);
注意:
String做基本数据类型来用时:
String不可变,他们的值在创建后不能被更改
String的值不可变,但是可以被共享
图解释一波:
▚反转:for循环倒过来遍历
package day11;
//反转,通过for循环
public class StringReverse {
public static void main(String[] args) {
String str="ABCDEFG";
for (int i =str.length()-1; i>=0; i--) {
System.out.print(str.charAt(i));
}
}
}
结果:
▚切分:split(String regex)
package day11;
//切分split
public class String_split {
public static void main(String[] args) {
String str="断肠人在天涯,古道西风瘦马,小桥流水人家,枯藤老树昏鸦,";
String[] split = str.split(",");
for (int i =0; i <split.length ; i++) {
System.out.println(split[i]);
}
}
}
结果:
▚替换:replace(old,new); 产生一个新的字符串,不会再原有的字符串上发生修改
package day11;
//替换Replace
public class StringReplace {
public static void main(String[] args) {
String str="123abc789";
String str1 = str.replace("abc", "456");
//替换不会将原本的字符串数组修改,而是创建一个新的字符串数组
System.out.println(str);//原来的,并没有替换
System.out.println(str1);//新的字符串数组是替换过的
}
}
结果:
▚判断后缀:endsWith(String suffix)
package day11;
//endWith,,判断后缀(判断前缀StartWith)
public class StringendWith {
public static void main(String[] args) {
String[] str={"abc.txt","123.java","4399.java","520.exe"};
for (int i = 0; i <str.length ; i++) {
boolean k=str[i].endsWith(".java");
System.out.println(k);
}
}
}
结果:
▚转义符:" \ "
举例子:
package day11;
//转义符,,“\”
public class ZYF {
public static void main(String[] args) {
System.out.println("543\n543");//提示:\n是换行的意思
System.out.println("543\\n543");//多加了一个斜杠直接把换行"\"转换成字符串输出
}
}
结果:
作用:
修改原有字母或字符的含义
注意:
①同一个字母或符号 在不同的时候含义可能不一样
②只能更改转义符后面第一位字母或符号的含义
▚StringBuilder
为什么使用?
①字符串的拼接,每次拼接都会创建一个新的String对象,即耗时又浪费空间,这种操作不可避免,我们可以通过StringBuilder类解决这个问题
②String中一些常见的操作,StringBuilder把这些操作封装成了方法,可以直接调用,不需要再手动书写代码进行实现。
构造:
public StirngBuilder():创建空白的StringBuilder 默认长度为16(new char[16])
public StringBuilder(String str):以str创建StirngBuilder,长度为str.length+16
操作:
(这些追加,反转,插入,删除都是在数组的时候学习的,只不过在这StringBuilder把它们封装)
方法名 | 说明 |
---|---|
public StringBuilder append(任意类型) | 追加数据并返回对象本身会在原本的数据上进行修改,不需要重新创建并接收 |
public StringBuilder reverse() | 返回相反的字符序列 |
public StringBuilder insert(int offset,任意数据) | 在指定位置上插入数据 |
public StringBuilder delete(int start, int end) | 删除一部分子字符串,从start开始到end结束 |
public StringBuilder deleteCharAt(int index) | 删除指定下标上的数据 |
▚①StringBuilder append(任意类型)
package day11;
public class StringBuilderAppend {
public static void main(String[] args) {
StringBuilder str1 = new StringBuilder("123456");
str1.append("ABCDEF");//追加这些数据给str1
System.out.println(str1);
}
}
结果:
▚②StringBuilder reverse()
package day11;
//StringBuilderReverse反转
public class StringBuilder1 {
public static void main(String[] args) {
String str="123456";
StringBuilder str1 = new StringBuilder(str);
str1.reverse();//反转
str1.toString();
System.out.println(str1);
}
}
结果:
▚③StringBuilder insert(int offset,任意数据)
package day11;
//StirngBuilderInsert插入
public class StringbuilderInsert {
public static void main(String[] args) {
StringBuilder str = new StringBuilder("1231321321");
str.insert(10,"A");//插入第十个位置,插入A
System.out.println(str);
}
}
结果:
▚④StringBuilderDelete(int start, int end)
package day11;
//StringBuilderDelete删除部分字符串
public class StringBuilderDelete {
public static void main(String[] args) {
StringBuilder str = new StringBuilder("123456");
str.delete(3,6);//删除部分字符串3-6位置
System.out.println(str);
}
}
结果:
▚⑤public StringBuilder deleteCharAt(int index)
package day11;
//public StringBuilder deleteCharAt(int index)
public class StringBuildDeleteCharAt {
public static void main(String[] args) {
StringBuilder str = new StringBuilder("12312A123");
System.out.println(str);//删除之前
str.deleteCharAt(5);
System.out.println(str);//删除之后
}
}
结果:(上面为删除之前,下面为删除之后,精准删除)
▚StringBuilder和String的相互转换
1.StringBuilder转为String
格式:
public String toString()
2.String转为StringBuilder
格式:
StringBuilder XX=new StringBuilder(String str)
▚问题:
*String 和StringBuilder使用new 构造();创建对象,结果为什么不是个地址值
原因:java会直接查找里面的内容,没有内容就是空,有就等于内容
这个是底层方法java自己实现通过地址值,查找地址值空间脸面的内容
(具体原因下下章讲解)
一、选择题
-
使用权限修饰符( )修饰的类的成员变量和成员方法,可以被当前包中所有类访问,也可以被它的子类(同一个包以及不同包中的子类)访问。(选择一项)
A public
B. protected
C. 默认
D. private -
给出如下代码,如何使成员变量m被方法fun()直接访问( )。(选择一项)
class Test {
private int m;
public static void fun() {
}
}A 将private int m 改为protected int m
B. 将private int m 改为public int m
C. 将private int m 改为static int m
D. 将private int m 改为int m
二、判断题
1.使用public修饰的成员属性和方法可以被当前项目中所有包的所有类访问。( )
2.类的方法通常设为public,而类的实例变量一般也设为public。( )
3.与未加访问控制符的缺省情况相比,public和protected修饰符扩大了类及其属性和方法的被访问范围,private修饰符则缩小了这种范围。( )
4.访问权限是private的变量,只能在本类和与本类同一个包中的其他类使用。( )
三、简答题
1.private、默认、protected、public四个权限修饰符的作用
(答案下一章节查看)
|
|
|
|
上一章节-java篇-DAY10-面向对象三大特征之一封装
下一章-DAY12-自习课来波练习题
天天更新不容易,随手点个小赞👍,你说是吧,吴彦祖!O(∩_∩)O