------- android培训、java培训、期待与您交流! ----------
--------------------------------------------java.lang.String类--------------------------------------------
java.lang.String类:String 类代表字符串.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
1.此类被定义为final,不能被继承;
2.在Java中,"字符串"是用String类的对象 表示的;
3.字符串是常量;它们的值在创建之后不能更改。
4.String内部,就是使用"字符数组"处理;
5.String对象实例化的方式比较特殊:
1).String s = "abc";//OK的
2).String s1 = new String("abc");//OK的
6.String类的构造方法:
public String():构造一个零长度字符串;会产生对象空间,不是空指针;
public String(byte[] bytes):将一个byte[]数组(每个byte值作为一个ASCII码值,查找对应的字符)转换为一个String;
public String(byte[] bytes,int offset,int length):将一个byte[]数组的一部分转换为String。
public String(char[] value):将一个char[]数组转换为一个String;
public String(char[] value,int offset,int count):将一个char[]数组的一部分转换为String
public String(String original):用一个String构造一个String
7.成员方法:
public int length():获取内部字符的长度;
String类的特点:字符串是常量;它们的值在创建之后不能更改。
public class Demo { public static void main(String[] args) { String s1 = "你好";//s1 = 0x2233 String s2 = "你好";//s2 = 0x2233 System.out.println("s1 == s2 : " + (s1 == s2));//true System.out.println("s1.equals(s2) : " + (s1.equals(s2)));//true String s3 = "你好"; String s4 = new String("你好"); System.out.println("s3 == s4 : " + (s3 == s4));//false System.out.println("s3.equals(s4) : " + (s3.equals(s4)));//true String s5 = new String ("你好"); String s6 = new String("你好"); System.out.println("s5 == s6 : " + (s5 == s6));//false System.out.println("s5.equals(s6) : " + (s5.equals(s6)));//true //---------------------------------------------------------------------// String s7 = "你好"; String s8 = "java"; String s9 = "你好java"; String s10 = s7 + s8; String s11 = s7 + "java"; String s12 = "你好" + s8; String s13 = "你好" + "java";//s13 = "你好java"; System.out.println("s9 == s10 : " + (s9 == s10));//false System.out.println("s9 == s11 : " + (s9 == s11));//false System.out.println("s9 == s12 : " + (s9 == s12));//false System.out.println("s9 == s13 : " + (s9 == s13));//true } }
String的判断功能:
boolean equals(Object obj):将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String 对象时,结果才为 true。
boolean equalsIgnoreCase(String str):不区分大小写的判断
boolean contains(String str):当且仅当此字符串包含指定的参数字符串时,返回 true。区分大小写
boolean startsWith(String str):测试此字符串是否以指定的前缀开始。 区分大小写
boolean endsWith(String str):测试此字符串是否以指定的后缀结束。区分大小写
boolean isEmpty():判断是否0长度字符串;
public class Demo { public static void main(String[] args) { String s1 = "java"; String s2 = "java"; String s3 = "Java"; // 1.boolean equals(Object obj):区分大小写 System.out.println("s1.equals(s2) : " + (s1.equals(s2))); System.out.println("s1.equals(s3) : " + (s1.equals(s3))); // 2.boolean equalsIgnoreCase(String str):不区分大小写的判断 System.out.println("s1.equalsIgnoreCase(s2) : " + s1.equalsIgnoreCase(s2)); System.out.println("s1.equalsIgnoreCase(s3) : " + s1.equalsIgnoreCase(s3)); // 3.boolean contains(String str):区分大小写 String s4 = "你好java"; System.out.println("s4中是否包含\"你好\":" + s4.contains("你好")); System.out.println("s4中是否包含\"a\":" + s4.contains("a")); System.out.println("s4中是否包含\"z\":" + s4.contains("z")); System.out.println("s4中是否包含\",\":" + s4.contains(",")); System.out.println("s4中是否包含\"av\":" + s4.contains("av")); System.out.println("s4中是否包含\"AV\":" + s4.contains("AV")); // 4. boolean startsWith(String str) String s5 = "你好java"; System.out.println(s5 + "中是否以\"你\"开头:" + s5.startsWith("你")); System.out.println(s5 + "中是否以\"你好\"开头:" + s5.startsWith("你好")); System.out.println(s5 + "中是否以\"你好java\"开头:" + s5.startsWith("你好java")); System.out.println(s5 + "中是否以\"java\"开头:" + s5.startsWith("java")); System.out.println(s5 + "中是否以\"你好ja\"开头:" + s5.startsWith("你好ja")); System.out.println(s5 + "中是否以\"你好JA\"开头:" + s5.startsWith("你好JA")); // 5.boolean endsWith(String str) System.out.println(s5 + "中是否以\"java\"结尾:" + s5.endsWith("java")); System.out.println(s5 + "中是否以\"Java\"结尾:" + s5.endsWith("Java")); // 6.boolean isEmpty() String s6 = "";// 0x2233 String s7 = new String("");// 0x5566 String s8 = null;// null System.out.println("s6.isEmpty() : " + s6.isEmpty());// true System.out.println("s7.isEmpty() : " + s7.isEmpty());// true System.out.println("s8.isEmpty() : " + s8.isEmpty());// 运行时异常:NullPointerException } }
String类的获取功能:
int length():区分数组的length属性
char charAt(int index):获取index位置上的字符
int indexOf(int ch):在此字符串中查找一个ch所代表的字符,如果存在则返回此字符的索引位置,否则返回-1;
int indexOf(String str):在此字符串中查找str,如果存在则返回此字符的索引位置,否则返回-1;
int indexOf(int ch,int fromIndex):在此字符串中查找一个ch所代表的字符,从fromIndex开始找;
int indexOf(String str,int fromIndex):在此字符串中查找str,从fromIndex开始找;
String substring(int start):截取子字符串,从start开始,截取到末尾(返回新字符串,原字符串不变)
String substring(int start,int end):截取子字符串,从start开始,到end - 1处;
public int lastIndexOf(String str):从右侧开始查找字符串str,如果找到返回这个str在字符串中出现的位置(从左到右)
public class Demo { public static void main(String[] args) { String s1 = "你好java"; System.out.println("s1.length() : " + s1.length()); int[] intArray = { 24, 32, 43, 25234 }; System.out.println("intArray.length = " + intArray.length); // 2.char charAt(int index) // 获取j char c = s1.charAt(2); System.out.println("c = " + c); // 遍历字符串 for (int i = 0; i < s1.length(); i++) { char cr = s1.charAt(i); System.out.print(cr); } System.out.println(); // 3.int indexOf(int ch) System.out.println("indexOf = " + s1.indexOf(98)); // 4.int indexOf(String str) String s2 = "你好java"; System.out.println("查找java : " + s2.indexOf("java")); // 5.int indexOf(int ch,int fromIndex) System.out.println("查找v : " + s2.indexOf(118, 2)); // 6.int indexOf(String str,int fromIndex) System.out.println("查找va : " + s2.indexOf("va", 2)); // 7.String substring(int start) // 截取java System.out.println("截取java:" + s2.substring(2)); System.out.println("s2 = " + s2); // 8.String substring(int start,int end) // 截取:ja System.out.println("截取ja : " + s2.substring(2, 4)); // 截取:java System.out.println("截取java : " + s2.substring(2, 6)); // 9.public int lastIndexOf(String str) String s3 = "我爱java"; System.out.println("s3.lastIndexOf(\"a\") : " + s3.lastIndexOf("a")); } }
String类的转换功能:
注意:下面的所有方法,都不会对原字符串产生变化
byte[] getBytes():将一个String转换为一个byte[]数组
char[] toCharArray():将本字符串转换为char[]数组;
static String valueOf(char[] chs):静态方法。将字符数组转换为String
static String valueOf(int i):静态方法。将一个int值转换为一个String;
String toLowerCase():全部转换为小写
String toUpperCase():全部转换为大写
String concat(String str):将参数字符串追加到当前字符串的末尾。相当于+符号的字符串相连;
public class Demo { public static void main(String[] args) { String s1 = "abc"; s1 = "你好"; byte[] byteArray = s1.getBytes();// 使用GBK for (int i = 0; i < byteArray.length; i++) { System.out.println(byteArray[i]); } System.out.println("------------------------------"); s1 = "你好java"; char[] charArray = s1.toCharArray(); for (int i = 0; i < charArray.length; i++) { System.out.println(charArray[i]); } // 将字符数组转换成字符串 charArray = new char[] { 'a', 'b', '你', '好' }; String s2 = String.valueOf(charArray); System.out.println("s2 = " + s2); // 将一个int值转换为一个String int n = 200; String s3 = String.valueOf(n); String s4 = "" + n; System.out.println("s3 = " + s3); System.out.println("s4 = " + s4); String s5 = "Hello"; // s5 = "你好"; System.out.println("全部转换为大写:" + s5.toUpperCase()); System.out.println("全部转换为小写:" + s5.toLowerCase()); System.out.println("原字符串s5 = " + s5); // 将参数字符串追加到当前字符串的末尾。相当于+符号的字符串相连 String s6 = "Hello"; String s7 = "World"; System.out.println(s6.concat(s7)); } }
String类的其它功能:
替换功能:
String replace(char old,char new):将字符串中的所有old字符,替换为new字符
String replace(String old,String new):将字符串中的所有的old字符串,替换为new字符串,
String trim():去除字符串两端空格
按字典顺序比较两个字符串
int compareTo(String str):区分大小写
int compareToIgnoreCase(String str):不区分大小写
public class Demo { public static void main(String[] args) { String str = "HelloWorld"; // 将字符串中所有o字符,替换为*字符 String s1 = str.replace('o', '*'); System.out.println("s1 = " + s1); System.out.println("str = " + str); // 将所有的ll,替换为LL s1 = str.replace("ll", "L"); System.out.println("s1 = " + s1); // trim():去除字符串两端的空格 str = " 你好 "; s1 = str.trim(); System.out.println("去除两端空格后:" + s1); // compareTo():按字典顺序比较两个字符串 String t1 = "a"; String t2 = "b"; String t3 = "c"; System.out.println("a.compareTo(b) : " + t1.compareTo(t2));// -1 System.out.println("a.compareTo(c) : " + t1.compareTo(t3));// -2 System.out.println("c.compareTo(a) : " + t3.compareTo(t1));// 2 String t4 = "abc"; String t5 = "aac"; String t6 = "aa"; String t7 = "abc"; String t8 = "abcd"; String t9 = "abcdef"; String t10 = "ac"; String t11 = "ab"; System.out.println("abc.compareTo(aac) : " + t4.compareTo(t5));// 1 System.out.println("abc.compareTo(aa) : " + t4.compareTo(t6));// 1 System.out.println("abc.compareTo(abc) : " + t4.compareTo(t7));// 0 System.out.println("abc.compareTo(abcd) : " + t4.compareTo(t8));// -1 // -3(abc的长度-abcdef的长度) System.out.println("abc.compareTo(abcdef) : " + t4.compareTo(t9)); System.out.println("abc.compareTo(ac) : " + t4.compareTo(t10));// -1 // 1(abc的长度-ab长度) System.out.println("abc.compareTo(ab) : " + t4.compareTo(t11)); String t12 = "a"; String t13 = "A"; System.out.println("a.compareToIgnoreCase(A) : "+ t12.compareToIgnoreCase(t13));// 0 } }
--------------------------------------------java.lang.StringBuffer类---------------------------------------------
java.lang.StringBuffer类:1.之前我们学习使用了String类,String类的一个重要特点:其值是不可变的:我们经常做一些字符串的拼接操作:例如:String str = "Hello";str = str + "World";System.out.println("str = " + str);//str = HelloWorld
2.StringBuffer类:字符串缓冲区类。
1).一个类似于 String 的字符串缓冲区;
2).虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容(它的内部是可变的)。
3.StringBuffer和String的区别:
1).StringBuffer内部的值是可变的;String的内部的值是不可变的;
4.注意:StringBuffer和String不同,不能使用"字符串字面量"直接赋值:
错误:StringBuffer buf = "abc"; //错误的
5.StringBuffer的构造方法:
public StringBuffer() :构造一个初始容量为16的StringBuffer。
public StringBuffer(int capacity):使用一个容量来构造一个StringBuffer。
public StringBuffer(String str):使用一个String构造一个StringBuffer。(将一个String转换为一个StringBuffer)。
说明两个概念:
1).容量:可以存储的字符的数量:capacity()
2).长度:已经存储的字符的数量:length()
public class Demo { public static void main(String[] args) { // 1.public StringBuffer() StringBuffer buf = new StringBuffer(); System.out.println("容量:" + buf.capacity());// 16 System.out.println("长度:" + buf.length());// 0 // 2.public StringBuffer(int capacity) StringBuffer buf2 = new StringBuffer(30); System.out.println("容量:" + buf2.capacity());// 30 System.out.println("长度:" + buf2.length());// 0 // 3.public StringBuffer(String str) StringBuffer buf3 = new StringBuffer("Hello"); System.out.println("容量:" + buf3.capacity());// 16 + 5 System.out.println("长度:" + buf3.length());// 5 StringBuffer buf4 = new StringBuffer("aaaaaaaaaaaaaaaaa");// 17个字符 System.out.println("容量:" + buf4.capacity());// 16 + 17 System.out.println("长度:" + buf4.length());// 17 } }
StringBuffer的添加功能:
public StringBuffer append(String str):将str追加到当前字符序列的末尾;
public StringBuffer insert(int offset,String str):将指定 str 插入此序列的offset位置。原offset位置上的字符依次后移;0
public class Demo { public static void main(String[] args) { StringBuffer buf = new StringBuffer(); StringBuffer buf2 = buf.append("Hello"); System.out.println("buf2 = " + buf2); System.out.println("buf = " + buf); System.out.println("buf2 == buf : " + (buf2 == buf)); /* * buf.append(12345); * buf.append(true); * buf.append('你'); * buf.append('a'); * buf.append('好'); */ buf.append(12345).append(true).append('你').append('a').append('好'); System.out.println("buf容量:" + buf.capacity());// 原长度 * 2 + 2 System.out.println("buf长度:" + buf.length());// 17 System.out.println("buf = " + buf); StringBuffer buf3 = new StringBuffer("HelloWorld"); // 要在World前,加入:Java buf3.insert(5, "Java"); System.out.println("buf3 = " + buf3); } }
删除功能
public StringBuffer deleteCharAt(int index):删除index位置上的字符
public StringBuffer delete(int start,int end):删除从start开始 到 end - 1处的所有字符;
public class Demo { public static void main(String[] args) { StringBuffer buf = new StringBuffer("HelloWorld"); //删除W字符 // buf.deleteCharAt(5); // System.out.println("buf = " + buf);//buf内部是可变的; //删除Hello buf.delete(0, 5); System.out.println("buf = " + buf); } }
替换功能
public StringBuffer replace(int start,int end,String str):替换从start到end - 1 处的所有字符,替换为str
反转功能
public StringBuffer reverse():反转内部的所有字符;
public class Demo { public static void main(String[] args) { StringBuffer buf = new StringBuffer(); buf.append("HelloWorld"); //将Hello替换为***** buf.replace(0, 5, "*****"); System.out.println("替换后的结果:" + buf); StringBuffer buf2 = new StringBuffer(); buf2.append("HelloWorld"); buf2.reverse(); System.out.println("buf2 = " + buf2); } }
截取功能:
以下两个方法,返回String,原StringBuffer中的内容不变;
public String substring(int start):截取从start开始,到内部字符序列的末尾;
public String substring(int start,int end):截取从start,到end - 1处
public class Demo { public static void main(String[] args) { StringBuffer buf = new StringBuffer(); buf.append("HelloWorld"); //截取Hello String str = buf.substring(0,5); System.out.println("str = " + str);//Hello System.out.println("buf = " + buf);//HelloWorld //截取World str = buf.substring(5); System.out.println("str = " + str); } }
String和StringBuffer的相互转换
String --> StringBuffer:
1.StringBuffer的构造方法:
StringBuffer buf = new StringBuffer("Hello");
2.StringBuffer的append()方法
StringBuffer buf = new StringBuffer();
buf.append("Hello");
StringBuffer --> String:
1.全部:StringBuffer的toString():
2.部分:StringBuffer的substring():
public class Demo { public static void main(String[] args) { //1.String --> StringBuffer String str = "Hello"; //--构造方法 StringBuffer buf1 = new StringBuffer(str); //--append StringBuffer buf2 = new StringBuffer(); buf2.append(str); //2.StringBuffer --> String //--全部:toString() String s1 = buf2.toString(); //--部分:substring() String s2 = buf2.substring(2);//llo } }