参考来自廖雪峰官方网站
自己进行对自己理解有帮助的加工,提取,注记
1.String
String s1 = "Hello!";与String s2 = new String(new char[] {'H', 'e', 'l', 'l', 'o', '!'});等价
Java字符串的一个重要特点就是字符串不可变。这种不可变性是通过内部的private final char[]字段,以及没有任何修改char[]的方法实现的。
==比较地址(地址与new有关,否则从常量池找)
equals比较内容
equalsIgnoreCase()忽略大小写比较内容
注意到contains()方法的参数是CharSequence而不是String,因为CharSequence是String的父类。是否包含
" \tHello\r\n ".trim(); // "Hello"移除字符串首尾空白字符。空白字符包括空格,\t,\r,\n
strip()方法也可以移除字符串首尾空白字符。它和trim()不同的是,类似中文的空格字符\u3000也会被移除:
isEmpty()和isBlank()来判断字符串是否为空和空白字符串:
一种是根据字符或字符串替换:
通过正则表达式替换:
分割字符串
拼接字符串
格式化字符串
字符串提供了formatted()方法和format()静态方法,可以传入其他参数,替换占位符,然后生成新的字符串:
2.类型转换
占位符有:
例如%.2f表示显示两位小数
任意基本类型或引用类型转换为字符串---重载方法
还有+拼接也是字符串
String str=78+"hh";
字符串转换为其他类型(调用基本数据类型封装类)
进制转换参考:
转换为char[]
String和char[]类型可以互相转换,方法是:
前面还有字符串转字符串数组split
3.编码
字符串转换成其他编码
注意:转换编码后,就不再是char类型,而是byte类型表示的数组。
如果要把已知编码的byte[]转换为String,可以这样做:
始终牢记:Java的String和char在内存中总是以Unicode编码表示。
虽然ASCII存储更小的内存---8bit,但不是它。
小结
4.StringBuilder,StringBuffer,StringJoiner,String.join()
str.append("Mr ")//尾部插入
.insert(index, "Hello, ");//按索引插入
省略str,称为链式操作
package test;
import java.util.StringJoiner;
/**
* @Title
* @Author Eastlin
* @Description:
*/
public class StringTest {
public static void main(String[] args) {
String[] names = {"Bob", "Alice", "Grace"};
//StringJoiner--指定“开头”和“结尾”
StringJoiner sj=new StringJoiner("*");//分隔符(前后都有字符才叫分隔符)
StringJoiner sj1=new StringJoiner(", ", "Hello ", "!");//分,前缀,后缀
for (String name : names) {
sj.add(name);
}
System.out.println(sj.toString());
for (String name : names) {
sj1.add(name);
}
System.out.println(sj1.toString());
//String.join()
String str=String.join("!", names);
System.out.println(str);
//StringBuilder
StringBuilder sb = new StringBuilder();
sb.append("Hello ");
for (String name : names) {
sb.append(name).append("#");
}
System.out.println(sb);
// 注意去掉最后的", ":
sb.delete(sb.length() - 1, sb.length());
sb.append("!");
System.out.println(sb);
}
}
操作字符串的类有:String、StringBuffer、StringBuilder。
StringBuffer、StringBuilder方法什么的都一样