String类的概述
1.String类的概述
string str = "abc"; //"abc"可以看成一个字符串对象
str = "def"; //当把“def”赋给str,"abc"就变成了垃圾
System.out.println(str); //string类重写了toString方法返回的是该对象
2.String类的构造方法
常见构造方法
public String():空构造
public String(byte[] bytes):把字节数组转成字符串
public String(byte[] bytes,int index,int length):把字节数组的一部分转成字符串
public String(char[] value):把字符数组转成字符串
public String(char[] value,int index,int count):把字符数组的一部分转成字符串
public String(String original):把字符串常量值转成字符串
3.String类的常见面试题
- 1.判断定义为String类型的s1和s2是否相等
String s1 = “abc”;
String s2 = “abc”;
System.out.println(s1 == s2);
System.out.println(s1.equals(s2)); 相等,当常量池没有”abc”的时候,会创建一个;但当有了的时候,会使用已经创造的,所以地址值一样。
- 2.下面这句话在内存中创建了几个对象?
String s1 = new String(“abc”); 2个,常量池一个,堆内一个
- 3.判断定义为String类型的s1和s2是否相等
String s1 = new String(“abc”);
String s2 = “abc”;
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
- 4.判断定义为String类型的s1和s2是否相等
String s1 = “a” + “b” + “c”;
String s2 = “abc”;
System.out.println(s1 == s2);
System.out.println(s1.equals(s2));
- 5.判断定义为String类型的s1和s2是否相等
String s1 = “ab”;
String s2 = “abc”;
String s3 = s1 + “c”;
System.out.println(s3 == s2);
System.out.println(s3.equals(s2));
4.String类的判断功能
boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
boolean contains(String str):判断大字符串中是否包含小字符串
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
boolean isEmpty():判断字符串是否为空。
public class Demo4_StringMethod {
public static void main(String[] args) {
String s1 = "heima";
String s2 = "heima";
String s3 = "HeiMa";
System.out.println(s1.equals(s2)); //true
System.out.println(s2.equals(s3)); //false
System.out.println("--------------"); //比较字符串,不区分大小写
System.out.println(s1.equalsIgnoreCase(s2)); //true
System.out.println(s2.equalsIgnoreCase(s3)); //true
System.out.println("--------------");
String s4 = "我爱heima";
String s5 = "baima";
System.out.println(s4.contains(s5)); //false
System.out.println(s4.contains(s1)); //true
System.out.println("--------------");//大字符串在前,判断是否为开头
String s6 = "我爱";
System.out.println(s4.startsWith(s6)); //true
}
}
5.String类的获取功能
int length():获取字符串的长度。
char charAt(int index):获取指定索引位置的字符
int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
int indexOf(String str):返回指定字符串在此字符串中第一次出现处的索引。
int indexOf(int ch,int fromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。
int indexOf(String str,int fromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。
lastIndexOf
String substring(int start):从指定位置开始截取字符串,默认到末尾。
String substring(int start,int end):从指定位置开始到指定位置结束截取字符串。
public class Demo5_StringMethod {
public static void main(String[] args) {
//int arr [ ]= {11,22,33};
//System.out.println(arr.length); //数组中的length是属性
String s1 ="今天天气,挺好的啊";
System.out.println(s1.length());//length()是一个方法,获取每个字符的个数
System.out.println("------------");
char c =s1.charAt(8);//根据索引获得对应位置的字符
System.out.println(c);
System.out.println("------------");
int index =s1.indexOf('啊');//参数接受的类型是int,但是传递的时候会自动提升
System.out.println(index);//如果不存在,返回-1
System.out.println("------------");
int index2 =s1.indexOf("天天");//获取字符串第一个字符出现的位置
System.out.println(index2);
System.out.println("------------");
String s2 = "woaiheima";
int index3 = s2.indexOf('a', 3);//索引字符a,从3的位置往后找(从前向后找)
System.out.println(index3);
System.out.println("------------");
String s3 = s2.substring(2,5);
System.out.println(s3);
}
}
6.String类的转换功能
byte[] getBytes():把字符串转换为字节数组。
char[] toCharArray():把字符串转换为字符数组。
static String valueOf(char[] chs):把字符数组转成字符串。
static String valueOf(int i):把int类型的数据转成字符串。
注意:String类的valueOf方法可以把任意类型的数据转成字符串
String toLowerCase():把字符串转成小写。
String toUpperCase():把字符串转成大写。
String concat(String str):把字符串拼接。
public static void main(String[] args) {
String s1 = "abc";
byte[] arr =s1.getBytes();
for(int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
String s2 ="你好你好";
byte[] arr2 =s2.getBytes();//通过gbk码表将字符串转换成字节数组
for(int i = 0; i < arr2.length; i++) {
System.out.print(arr2[i]+" ");//gbk码表一个中文代表两个字节
}
System.out.println();
String s3 = "heima";//这种方法类似用chatAt索引字符,再进行遍历的方式
char [] arr3 = s3.toCharArray();
for(int i = 0; i < arr3.length; i++) {
System.out.print(arr3[i]+" ");
}
System.out.println();
char[] arr4 = {'a','b','c'};//底层是由String类的构造方法完成的
String s4 =String.valueOf(arr4);
System.out.println(s4);
String a1 = "hEIMa";
String a2 = "chengxuyuan";
String a3 = a1.toLowerCase();
String a4 = a2.toUpperCase();
System.out.println(a3);
System.out.println(a4);
System.out.println(a3.concat(a4));
}
7.String类的其他功能
- A:String的替换功能及案例演示
String replace(char old,char new)
String replace(String old,String new)
- B:String的去除字符串两空格及案例演示
String trim()
- C:String的按字典顺序比较两个字符串及案例演示
int compareTo(String str)
int compareToIgnoreCase(String str)
public static void main(String[] args) {
String s1 = "abcdefgaaa";
String s2 = s1.replace('a', 'b');
System.out.println(s2);
String s3 = s1.replace("abc", "pdf");
System.out.println(s3);
String s5 = "abc def gaa a";
System.out.println(s5);
String s4 = s1.trim();
System.out.println(s4);
}
String类的排序查找
import java.util.Arrays;
public class Demo1_arrays {
/**
* public static String toString(int [ ] a )
* public static void sort(int [ ] a)
* pubilc static int binarySearch(int [] a, int key)
*/
public static void main(String[] args) {
int [] arr = {33,22,11,44,55,66};
System.out.println(Arrays.toString(arr));//数组转字符串
Arrays.sort(arr);//排序
System.out.println(Arrays.toString(arr));
int[] arr2 = {11,22,33,44,55,66};//二分查找,有序,重复的无法查找
System.out.println(Arrays.binarySearch(arr2, 22));
System.out.println(Arrays.binarySearch(arr2, 66));
System.out.println(Arrays.binarySearch(arr2,
88));//返回负插入点-1
}
}
基本数据类型与字符串之间的转换
package heima_day13_wrap;
public class Demo1 {
//基本类型包装类
//用于基本数据类型与字符串之间的转换
public static void main(String[] args) {
System.out.println(Integer.toBinaryString(60));
System.out.println(Integer.toOctalString(60));
System.out.println(Integer.toHexString(60));
System.out.println("-----------------");
System.out.println(Integer.MAX_VALUE);
System.out.println(Integer.MIN_VALUE);
Integer i1 = new Integer(100);
System.out.println(i1);
//Integer i2 = new Integer("abc"); 数字格式异常
//System.out.println(i2);
/**
* <u>int</u>-string
* 1. 和""进行拼接
* 2.public static String valueOf(int i)
* 3.<u>int</u> -- Integer -- String (Integer类的toString方法())
* 4.public static String toString(nt i)(Integer类的静态方法)
*
* string - int
* 1.string - integer - int
* public static int paresint(string s )
*/
}
}
自动装箱与自动拆箱
public class Demo2_jdk {
/**
* JDK5新特性
* 自动装箱:把基本类型转为包装类类型
* 自动拆箱:把包装类类型转换为基本类型
*
* Integer i1 =100;
* i1 += 200;
*
* 在使用时,Integer x = null;代码会出现NULLPointerException
* 建议先判断是否为null,然后再使用
*/
public static void main(String[] args) {
// <u>int</u> x =100;
// Integer i1 = new Integer(x);//将基本数据类型包装成对象,装箱
// <u>int</u> y = i1.intValue();//将对象转换为基本数据类型,拆箱
Integer i2 = 100; //自动装箱,把基本数据类型转换为对象
int z = i2 + 200; //自动拆箱,把对象转换为基本数据类型
System.out.println(z);
}
}