String类
-
主要用途
String 类代表字符串。Java 程序中的所有字符串字面值(如 “abc” )都作为此类的实例实现。
字符串是常量,它们的值在创建之后不能更改。因为 String 对象是不可变的,所以可以共享。字符串可以看成一个字符数组。 -
构造方法
构造方法 描述 String() 创建一个空字符串 String(String original) 根据字符串创建一个副本 String(byte[ ] bytes) 通过使用平台的默认字符集解码指定的字节数组构造新的 String String(byte[ ] bytes, int offset, int length) 使用平台的默认字符集来解码指定的字节子阵列,并创建字符串 String(byte[ ] bytes, String charsetName) 使用指定的字符集来解码指定的字节子阵列,并创建字符串 String(byte[ ] bytes, int offset, int length, String charsetName) 使用指定的字符集来解码指定的字节子数组,并创建字符串 String(char[ ] value) 使用字符数组中的字符,创建字符串 -
常用方法
常用方法 描述 char charAt(int index) 返回指定索引处的 char值 int length() 返回此字符串的长度 String[ ] split(String regex) 将字符串以 regex 为切点,切分成字符串数组。 String substring(int beginIndex) 返回一个子字符串,以beginIndex下标开始 -
使用方法
这里暂时只演示最简单的创建字符串、charAt(int index);方法返回指定索引处的 char值、lenght();方法返回字符串长度,以及字符串的拼接。-
创建字符串
直接创建:
String str1 = “Hello”;
用构造方法创建:
String str = new String("Hello“);
注意:
String 创建的字符串存储在常量池(公共池)中,而 new 创建的字符串对象储存在堆内存中。String s1 = "Runoob"; // String 直接创建 String s2 = "Runoob"; // String 直接创建 String s3 = s1; // 相同引用 String s4 = new String("Runoob"); // String 对象创建 String s5 = new String("Runoob"); // String 对象创建
-
charAt(int index) 与 lenght() 方法
public class TestString { public static void main(String[] args) { //创建一个字符串 String str = "Hello"; //遍历字符串 for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); System.out.println(c); } } } ---*--- 输出结果: H e l l o
-
字符串拼接
public class TestString { public static void main(String[] args) { String str1 = "He"; String str2 = str1+"llo";//字符串通过 + 号拼接 System.out.println(str1); System.out.println(str2); } } ---*--- 输出结果: He Hello
注意:
字符串在使用 ‘+’ 号进行拼接的时候会产生新的对象。上面代码中 str1的 He 、 str2的 Hello 以及 llo 均是字符串对象。在此引出StringBuilder和StringBuffer类。
-
StringBuffer 与 StringBuilder类
- 主要用途
String、StringBuffer和StringBuilder都是字符串类,String类是不可变类,任何对String的改变都 会引发新的String对象的生成;StringBuffer和StringBuilder则是可变类,任何对它所指代的字符串的改变都不会产生新的对象。字符串拼接时不会产生新的对象。 - StringBuffer 与 StringBuilder的区别
它们的原理和操作基本相同,区别在于StringBufferd支持并发操作,线性安全的,适合多线程中使用。StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用。但StringBuilder在单线程中的性能比StringBuffer高。 - 使用方法
由于StringBuilder和StringBuffer的操作基本相同,这里只演示StringBuilder的 append() 方法追加数据(数据可以是基本类型和字符串)、insert() 方法指定索引处插入数据(数据可以是基本类型和字符串)、reverse();方法翻转字符串以及String和StringBuilder的转换。-
创建StringBuilder对象的基本语法
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(String str); -
使用 append() 方法
public class TestStringBuilder { public static void main(String[] args) { StringBuffer sb = new StringBuffer("开始"); sb.append(1); sb.append(2.0); sb.append("结束"); System.out.println(sb); } } ---*--- 输出结果: 开始12.0结束
-
使用 insert() 方法
public class TestStringBuilder { public static void main(String[] args) { StringBuffer sb = new StringBuffer("开始"); sb.insert(1,"插入"); System.out.println(sb); } } ---*--- 输出结果: 开插入始
-
使用 reverse() 方法
public class TestStringBuilder { public static void main(String[] args) { StringBuffer sb = new StringBuffer("开始"); sb.reverse(); System.out.println(sb); } } ---*--- 输出结果: 始开
-
String与StringBuilder转换
public class TestStringBuilder { public static void main(String[] args) { //String转StringBuilder String str1 = "开始"; StringBuffer sb1 = new StringBuffer(str1); System.out.println(sb1); //StringBuilder转String StringBuilder sb2 = new StringBuilder("结束"); String str2 = sb2.toString(); System.out.println(str2); } } ---*--- 输出结果: 开始 结束
-
扩展
- public String[] split(String regex) 分隔字符串,返回String数组
该方法可将字符串以指定符号进行分隔,成多个字符串,并将其以字符数组形式返回public class Demo { public static void main(String[] args) { String s = "11,22,32,55,34,63,2"; String[] ss = s.split(",");//以 , 号为分隔点 System.out.println(Arrays.toString(ss)); } } ---*--- 输出结果: [11, 22, 32, 55, 34, 63, 2]