Java API -----String
1.String创建方法
//常用的创建String类型方法
String str = "Hello";
String s1 = new String();
//基本的方式
String s2 = new String("Hello2");
String s3 = new String(new char[]{'H','e','l','l','o','3'});
String s4 = new String(new char[]{'H','e','l','l','o','3'},0,2);
//public String(char[] value,int offset,int count):把字符数组一部分转成字符串。
String s5 = new String(new int[]{65,66,67,68,69},0,2);
String s6 = new String(new byte[]{65,66,67,68,69});
String s = ""+87;//87 ===> 数类型 转换称String类型最快捷的方式
s = 4+5+"1"+6;//9 + “1" ==> "91"+6 ==> 916
System.out.println(s);//916
2.String类的获取
int length = str.length();
char c = str.charAt(int);
int a = str.indexOf(char);
int b = str.indexOf(String);
int c = str.indexOf(char,int);
int d = str.indexOf(String,int);
String s = str.substring(int);
String s = str.substring(int);
public static void main(String[] args) {
String string = "drtgjdfhet4tfgyjhgjkuhjkutyf";
//获取数组的长度
int length = string.length();
System.out.println(length);
//获取指定索引处的字符
char c = string.charAt(2);
System.out.println(c);
//获取当前字符在String中的第一次出现的下标 , 如果当前字符串中没有匹配到返回-1
int ch = string .indexOf("t");
System.out.println(ch);
//从指定下标开始检查指定内容,获取从指定下标后第一次出现的下标 , 如果当前字符串中没有匹配到返回-1
System.out.println(string.indexOf("yh",6));
System.out.println(string.indexOf('e',2));
//从指定下标开始截取字符串
System.out.println(string.substring(2));
System.out.println(string.substring(1,6));
//通过下标返回字符ASCI值
System.out.println(string.codePointAt(3));
}
结果
28
t
2
-1
8
tgjdfhet4tfgyjhgjkuhjkutyf
rtgjd
103
3.String进行判断功能
boolean a = str.equals(String);
boolean b = str.equalsIgnoreCase(String);
boolean c = str.equalsIgnoreCase(String,int);
boolean d = str.endsWith(String);
boolean e = str.isEmpty();
System.out.println(null == str3);
public static void main(String[] args) {
String string = "vbhjdrbgeiakuhbngta";
//比较两个字符串是否相等 : == , equals(String string)
System.out.println(string.equals("vbduyjuysrh"));
System.out.println(string.equals("vbhjdrbgeiakuhbngta"));
//忽略英文大小写进行比较 --> 比较验证码使用 hgzAs9
System.out.println(string.equalsIgnoreCase("VBhjDrbgeiakuhbngta"));
//判断当前字符串是否以str为开始
System.out.println(string.startsWith("vbhj"));
System.out.println(string.startsWith("hj",8));
System.out.println(string.startsWith("hj",2));
//判断当前字符串对象是是否以str为结尾 ---> 判断后缀
String str = "新建文本文档.txt";
System.out.println(str.endsWith(".txt"));
System.out.println("------------------------");
//判断当前字符串是否为空
System.out.println(str.isEmpty());
String str2 = "";
System.out.println(str2.isEmpty());//true表示当前字符串为空(字符长度为0)
System.out.println(str2.length());//等值 str2.length == 0 表示当前字符串为空
String str3 = null;//表示没有对象 -->空对象
// System.out.println(str3.isEmpty());//没有对象就无法使用
System.out.println(str3);
System.out.println(null == str3);//判断null的值
}
结果
false
true
true
true
false
true
true
------------------------
false
true
0
null
true
4.String转换方法
char[] a = str.toCharArray();
String b = str.toUpperCase();
String c = str.toLowerCase();
String str = "sndkackdacda";
//将字符串转换为char数组
char[] ch = str.toCharArray();
System.out.println(Arrays.toString(ch));
//将字符串转为大写
System.out.println(str.toUpperCase());
System.out.println(str);
//将字符串转换为小写
String str1 = str.toUpperCase();
System.out.println(str1.toLowerCase());
5.String其它常用方法
String a = str.trim();
String[] b = str.split(char);
String c = str.subSequence(int,int);
String d = str.replace(char,char);// (被替换,替换)
String e = str.replaceFirst(char,char);// (被替换,替换)
String f = str.replaceAll(String,String);//(被替换,替换)
int g = str.lastIndexOf(char);
boolean h = str.contains(String);
String i = str.concat(String);
String str = " reyher cdjna ";
//1.去除字符串两端的空格
System.out.println(str.trim());
System.out.println(str);
//2.以Str进行字符串切分,返回一个字符串数组
str = "a_b_abc_cd";
String[] strArr = str.split("_");
System.out.println(Arrays.toString(strArr));
//3.根据下标进行截取
System.out.println(str.subSequence(2,5));
//4.将指定字符替换称其它字符
System.out.println(str.replace('a','s'));
//5.将指定的字符串替换其他字符串
System.out.println(str.replaceAll("a","s"));
//6.替换第一出现的字符串
System.out.println(str.replaceFirst("a","s"));
//7.返回指定字符最后一次出现的下标
System.out.println(str.lastIndexOf("c"));
//8.判断当前字符串是否包含指定字符串
System.out.println(str.contains("ae"));
//9.在原有的字符串进行添加新字符串
System.out.println(str.concat("abcd "));
结果
reyher cdjna
reyher cdjna
[a, b, abc, cd]
b_a
s_b_sbc_cd
s_b_sbc_cd
s_b_abc_cd
8
false
a_b_abc_cdabcd
String 中 == 与 equals
== 比较的是内存的地址值是否一致
equals 比较的对象中属性的值是否一致(当前equals方法需要重写)
public static void main(String[] args) {
String s1 = "abc";//在字符串常量池中创建一个“abc”
String s2 = "abc";//指向s1在字符串常量池中的地址
String s3 = new String("abc");//在堆空间创建一个字符串对象
String s4 = new String("abc");
System.out.println(s1 == s2);
System.out.println(s1 == s3);
System.out.println(s1 == s4);
System.out.println(s3 == s4);
}
结果
true
false
false
false
Notes:
1.常量和常量拼接,地址依旧在常量池中,指向同一个地址
2.常量和变量拼接,地址就在堆空间中,因而没有指向同一个地址
StringBuffer(jdk1.0)和StringBuilder(jdk1.5)
String类型一旦创建就无法修改(重新创建一个对象,原有对象通过GC机制回收),因而存在大量数据操作的情况下,String类型不适合我们操作
StringBuffer常用方法
StringBuffer对象.append(String str) //追加内容到当前 StringBuffer 对象的末尾,类似于字符串的连接。
StringBuffer对象.setCharAt(int index, char ch); //修改对象中索引值为 index 位置的字符为新的字符 ch
StringBuffer对象.insert(int index, char ch); //字符串插入
StringBuffer对象.reverse(); //对字符串进行反转
StringBuffer对象.deleteCharAt(int index); //移除序列中指定位置的字符
StringBuffer对象.delete(int start,int end);//移除序列中子字符串的字符 删除下标区间,包括开始不包括结束
StringBuffer对象.capacity(); //有int类型返回值,表示当前对象容器的大小。 返回值为 创建对象长度+16
针对字符串操作中效率由高到低的排序
Stringbuilder > Stringbuffer > String StringBuilder
线程非安全 StringBuffer 线程安全
什么场景使用什么类
String : 字符串拼接操作较少时,可以使用(同时间段中10000左右的操作都可以使用)
StringBuilder : 单线程程序,大量字符串拼接时使用
StringBuffer:需要保证多线程数据安全情况下使用。