字符串的内存结构
String类的常用方法
TestString
package com.ff.string; import org.junit.Test; //equals比较的内容, //==比较的值(地址值) //String:代表不可变的字符序列,底层使用char[]存放 //String是final不可被继承的 public class TestString { /* public String substring(int startpoint) public String substring(int start,int end):返回start开始到end结束的一个左闭右开的子串,start从0开始 pubic String replace(char oldChar,char newChar) public String replaceAll(String old,String new) public String trim():取出当前字符串中收尾出现的空格 public String concat(String str) : 连接当前字符串与str public String[] split(String regex):按照regex将当前字符串拆分,拆分为多个字符串,整体返回值为String[ ] */ @Test public void test4(){ String str1 = "今朝有酒今朝醉,"; String str2 = "明日愁来明日愁。"; String str3 = str1.substring(1, 3); System.out.println(str3);//朝有 [ ) 左闭右开 String str4 = str2.replace("明日", "明夜");//和replaceAll差不多 System.out.println(str4); String str5 = " abd ad "; System.out.println(str5.trim());//abd ad String str6 = str1.concat(str2); System.out.println(str6);//今朝有酒今朝醉,明日愁来明日愁。 String str7 = "acn_d-dea-fg"; String[] strs = str7.split("-"); for(int i = 0;i<str7.length();i++){ System.out.println(strs[i]); } } /* String类的常用方法: public int length() public char charAt(int index) :返回指定index位置的字符 public boolean equals(Object anObject):比较两个字符串是否相等,相等返回true,不等返回false public int compareTo(String anotherString): 从前往后比较字符串的首个不同的字符的大小, 若字符串长度不相同,就以字符串的长度进行比较。
若大于结果为正数,小于为负数 public int indexOf(String s):返回s字符串在当前字符串中首次出现的位置,若没有返回 -1 public int indexOf(String s,int startpoint):返回s字符串从当前字符串savepoint位置开始的,首次出现的位置 public int lastIndexOf(String s):返回s字符串最后一次在当前字符串出现的位置,若无,返回-1 public int lastIndexOf(String s ,int startpoint);同上 public boolean startsWith(String prefix):判断当前字符串是否以suffix开始 public boolean endsWith(String suffix):判断当前字符串是否以suffix结束 public boolean regionMatches(int firstStart,String other,int otherStart ,int length) 判断当前字符串从firstStart开始的子串与另一个字符串other从otherStart开始,length长度的字符串是否equals */ @Test public void test3() { String str1 = "abcdefghigk"; String str2 = "abcd"; String str3 = "bc"; String str4 = "jkbcc"; System.out.println(str2.length());//4 System.out.println(str1.charAt(0));//a System.out.println(str1.equals(str2));//fales System.out.println(str2.equals("abcd"));//true System.out.println(str1.compareTo(str2));//7 System.out.println(str1.indexOf(str3));//1 没有的话返回-1 System.out.println(str1.indexOf(str2, 3));// -1 System.out.println(str1.startsWith(str2)); System.out.println(str1.regionMatches(10, str4, 0, str3.length()));//false } @Test public void test2() { //String是一个不可改变字符的序列,一旦被赋值,其值不可更改 String str1 = "java"; str1 = str1 + "android"; System.out.println(str1);//javaandroid } @Test public void test1() { String str1 = "JavaEE"; String str2 = "JavaEE"; String str3 = new String("JavaEE"); String str4 = "JavaEE" + "Android"; String str5 = "Android"; String str6 = str1 + str5; str5 = str5 + "Handoop"; String str7 = str6.intern(); String str8 = "JavaEEAndroid"; System.out.println(str1 == str2);// true System.out.println(str1 == str3);// false System.out.println(str1.equals(str3));// true System.out.println(str4 == str6);// false System.out.println(str4.equals(str6));// true 4是两个地址值,和6拼到一起的不一样 System.out.println(str7 == str4);// true 这两个拼到一起的一样 System.out.println(str4 == str8);// true Person p1 = new Person("AA"); Person p2 = new Person("AA"); System.out.println("--------" + (p1.name == p2.name));
// true, // P1,P2的name属性指的都是常量池中同一个AA的地址值 } } class Person { String name; public Person(String name) { this.name = name; } }