-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;
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;
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;
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;
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");
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");
System.out.println(str1);
}
}
结果: 
?②StringBuilder reverse()
package day11;
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;
public class StringbuilderInsert {
public static void main(String[] args) {
StringBuilder str = new StringBuilder("1231321321");
str.insert(10,"A");
System.out.println(str);
}
}
结果: 
?④StringBuilderDelete(int start, int end)
package day11;
public class StringBuilderDelete {
public static void main(String[] args) {
StringBuilder str = new StringBuilder("123456");
str.delete(3,6);
System.out.println(str);
}
}
结果: 
?⑤public StringBuilder deleteCharAt(int index)
package day11;
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-面向对象
|