2021.02.20
第14次记录。
昨天因单位事情耽误一天,未学习java。今天继续。
课堂笔记:
1.我们在实际开发中,如果需要进行字符串的频繁拼接,会造成什么问题?
因为java中的字符串是不可变的,每一次拼接都会产生新字符串。这样
会占用大量的方法区内存。造成内存空间的浪费。
如果以后需要进行大量字符串的拼接操作,建议使用JDK中自带的:
java.lang.StringBuffer
java.lang.StringBuilder
2.如何优化StringBuffer的性能?
在创建StringBuffer的时候尽可能给定一个初始化容量。
最好减少底层数组的扩容次数。预估计一下,给一个大一些初始化容量。
关键点:给一个合适的初始化容量。可以提高程序的执行效率
3.StringBuffer和StringBuilder的区别?
StringBuffer中的方法都有:synchronized关键字修饰,
表示StringBuffer在多线程环境运行下是安全的。
StringBuilder中的方法都没有synchronized关键字修饰,在多线程环境运行下是不安全的。
代码演示1:
public class StringBufferText01 {
public static void main(String[] args) {
StringBuffer stringbuffer = new StringBuffer();
//拼接字符串,以后拼接字符串统一调用append()方法。append是追加的意思
stringbuffer.append("我");
stringbuffer.append("是");
stringbuffer.append("中");
stringbuffer.append("国");
stringbuffer.append("人");
System.out.println(stringbuffer);
//制定初始化容量的StringBuffer对象(字符串缓冲区对象)
StringBuffer sb = new StringBuffer(100);
sb.append("hello ");
sb.append("world, ");
sb.append("hello ");
sb.append("java");
System.out.println(sb);
//使用StringBuilder也可以完成字符串的拼接
StringBuilder sb2 = new StringBuilder();
sb2.append("hello ");
sb2.append("world, ");
sb2.append("hello ");
sb2.append("java");
System.out.println(sb2);
}
}
输出结果:
我是中国人
hello world, hello java
hello world, hello java
代码演示2(包含课堂笔记):
public class StringTest04 {
public static void main(String[] args) {
//String类常用方法
//1.charAt(int index) 返回 char指定索引处的值。
char c = "中国人".charAt(1);
System.out.println(c);
//2.compareTo(String anotherString) 按字典顺序比较两个字符串。
//字符串之间比较大小只能用compareTo
System.out.println("abc".compareTo("abc")); //0
int result = "abcd".compareTo("abce"); //-1
System.out.println(result);
System.out.println("abce".compareTo("abcd")); //1
//3.contains(CharSequence s) 判断前面的字符串是否包含后面的子字符串
System.out.println("HelloWorld.java".contains(".java")); //true
//4.endsWith(String suffix) 判断当前字符串是否以某个字符串结尾
System.out.println("test.txt".endsWith("t")); //true
System.out.println("test.txt".endsWith("a")); //false
//5.equals
System.out.println("abc".equals("A")); //false
//6.equalsIgnoreCase(String anotherString) 判断两个字符串是否相等,并同时忽略大小写
System.out.println("abc".equalsIgnoreCase("AbC"));
//7.getBytes() 将字符串对象转换成字节数组
byte[] bytes = "abcdef".getBytes();
for (int i = 0; i < bytes.length; i++){
System.out.println(bytes[i]);
}
//8.indexOf(String str) 判断某个子字符串在当前字符串中第一次出现处的索引
System.out.println("ffdfasdasdasdwqrtf".indexOf("w"));
//9.isEmpty() 判断某个字符串是否为空
System.out.println("faf".isEmpty()); //false
String str = "";
System.out.println(str.isEmpty()); //true
//10.int length()
//注意:判断数组长度是length属性,判断字符串长度是length()方法
System.out.println("abc".length()); //3
//11.lastIndexOf(String str) 判断某个子字符串在当前字符串中最后一次出现的索引(下标)
System.out.println("sfaafdxgedcxvddqwgfvdxc".lastIndexOf("c")); //22
//12.String replace(CharSequence target, CharSequence replacement) 替换
System.out.println("http://www.baidu.com".replace("http://", "https://"));
//13.split(String regex) 拆分字符串
String[] strs = "1990-11-29".split("-");
for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]);
}
//14.startsWith(String prefix) 判断某个字符串是否以某个子字符串开始的
System.out.println("www.baidu.com".startsWith("w")); //true
//15.substring(int beginIndex) 截取字符串,参数是起始下标
System.out.println("https://www.baidu.com".substring(8));
//16.substring(int beginIndex, int endIndex)
//beginIndex是起始位置(包括),endIndex(不包括)
System.out.println("https://www.baidu.com".substring(8, 11));
//17.char[] toCharArray() 将此字符串转换为新的字符数组。
char[] chars = "我是中国人".toCharArray();
for (int i = 0; i < chars.length; i++){
System.out.println(chars[i]);
}
//18.toLowerCase() 转换为小写
System.out.println("WangBa".toLowerCase());
//19.toUpperCase() 转换为大写
System.out.println("WangBa".toUpperCase());
//20.trim() 去除字符串前后空白的
System.out.println(" jidasji vj ojoj ojgw ".trim());
//21.String中只有一个方法是静态的不需要new对象
//valueOf(boolean b) 将非字符串转换为字符串
String s1 = String.valueOf(new C());
System.out.println(s1);
}
}
class C{
@Override
public String toString() {
return "我是中国人";
}
}
输出结果:
国
0
-1
1
true
true
false
false
true
97
98
99
100
101
102
13
false
true
3
22
https://www.baidu.com
1990
11
29
true
www.baidu.com
www
我
是
中
国
人
wangba
WANGBA
jidasji vj ojoj ojgw
我是中国人