标签:
一、String
关于String类型变量,我们必须知道String并不是基本数据类型,而是一个对象,String对象为不可变对象,一旦在内存中创建,内容不能发生变化,若要对字符串内容改变,那么就会创建新对象。
当创建字符串对象的时候,我们知道在初始化之前,值为null。
String s1 = ””; String s2 = null; String s3 = new String();
s2表示的对象是还未创建,因此,它的内存尚未分配
s1,s3则表示有内存空间,只是空间里面没有值
String常用方法:
equals() ——判断内容是否相同。
compareTo() ——判断字符串的大小关系。
compareToIgnoreCase(String int) ——在比较时忽略字母大小写。
equalsIgnoreCase() ——忽略大小写的情况下判断内容是否相同。
reagionMatches() ——对字符串中的部分内容是否相同进行比较
charAt(int index) ——返回指定索引index位置上的字符,索引范围从0开始。
indexOf(String str)——从字符串开始检索str,并返回第一次出现的位置,未出现返回-1。
indexOf(String str,int fromIndex);——从字符串的第fromIndex个字符开始检索str。
lastIndexOf(String str)——查找最后一次出现的位置。
lastIndexOf(String str,int fromIndex)—-从字符串的第fromIndex个字符查找最后一次出现的位置。
starWith(String prefix,int toffset)—–测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
tarWith(String prefix)——测试此字符串是否以指定的前缀开始。
endsWith(String suffix)——测试此字符串是否以指定的后缀结束。
public String subString(int beginIndex)——返回一个新的字符串,它是此字符串的一个子字符串。
public String subString(int beginIndex,int endIndex)——返回的字符串是从beginIndex开始到endIndex-1的串。
public String replace(char oldChar,char newChar)。
public String replace(CharSequence target,CharSequence replacement)——把原来的etarget子序列替换为replacement序列,返回新串。
public String replaceAll(String regex,String replacement)——用正则表达式实现对字符串的匹配。
二、StringBuilder/StringBuffer
StringBuffer是线程安全的,同步处理的,性能稍慢
StringBuilder是非线程安全的,并发处理的,性能稍快(建议使用)
三、String测试
/** * Java中的字符串对象为不变对象,意思是字符串对象创建后,内容不能改变,若想改变内容必须创建新对象。 * java使用字符串常量池来缓存通过字面量创建的字符串对象,并重用它们。 * @author Administrator * */ public class StringDemo1 { public static void main(String[] args) { String s1 = "Hello"; String s2 = "World"; String s3 = s1 + s2; String s4 = "HelloWorld"; String s5 = "Hello"; System.out.println(s1==s5); System.out.println(s3==s4); System.out.println(s3.equals(s4)); s4 += "!"; System.out.println(s3==s4); } }
public class StringDemo2 { public static void main(String[] args) { /* * 编译器有一个优化措施,在编译源程序时,所计算表达是两边的内容都是字面量 * 那么会直接计算,并将结果编译到字节码文件中 * 这样的好处在于JVM运行时不用每次都计算了。 * 所以下面的代码在字节码文件中为 * String = "123abc" */ String s1 = "123abc"; String s2 = "123abc"; String s3 = "123" + "abc"; String s4 = "123"; String s5 = s4 + "abc"; String s6 = 1 + "23" + "abc"; String s7 = 1 + ‘2‘ + "3abc";//53abc String s8 = "33abc"; String s9 = new String("123abc"); System.out.println(s1==s9); System.out.println(s7); System.out.println(s1==s3); System.out.println(s1==s5); System.out.println(s1==s6); System.out.println(s1==s7); } }
public class StringDemo3 { /** * int length() * 返回当前字符串的字符数量 */ @Test public void testLength(){ String s = "HelloWorld"; int len = s.length(); System.out.println(len); } @Test public void testIndexOf(){ String s = "HelloWorld"; /* * int indexOf(String str) * 查看给定的字符串在当前字符串中的位置,若有,则返回给定字符串第一个字符在当前字符串中的下标位置。 * 若没有,则返回 -1. * */ int index = s.indexOf("l"); System.out.println("index:" + index); index = s.indexOf("L"); System.out.println("index:" + index); /* * 重载方法:可以从给定位置开始查找,第一次数显给定字符串的位置 */ index = s.indexOf("l", 3); System.out.println("index:" + index); /* * int lastIndexOf(String str) * 查看给定字符串在当前字符串中最后一次出现的位置 */ index = s.lastIndexOf("l"); System.out.println("lastIndex:" + index); } @Test public void testSubString(){ /* * String substring(int start,int end) * 截取字符串 * * java api 中通常使用2个数字表示范围的时候,都是含头不含尾的。 * 下面的:包含下标为5对应的字符,但是不包含8对应的字符 */ String s = "HelloWorld"; String sub = s.substring(5, 8);//前闭后开,包括5,不包括8的新字符串 System.out.println(sub); /* * 重载方法: * String substring(int start) * 从给定位置开始一直截取到字符串末尾 */ sub = s.substring(4); System.out.println(sub); } /* * 获取域名 * 从第一个 "." 之后的第一个字符开始截取到 第二个 "." 之前的字符串。 */ @Test public void testYuMing(){ String url = "www.baidu.com/?video.video"; int start = url.indexOf(".") + 1;//第一次位置 // int end = url.lastIndexOf("."); int end = url.indexOf(".", start);//第二次位置 String yuming = url.substring(start, end); System.out.println(yuming); } @Test public void testTrim(){ String str = " Hello World "; /* * String trim() * 去除当前字符串两边的空白 */ String trim = str.trim(); System.out.println(str); System.out.println(trim); } @Test public void testCharAt(){ /* * char charAt(int index) * 查看当前字符串中给定位置的字符 */ String str = "HelloWorld"; char charAt = str.charAt(5);//查看下标为5的字符是 ?即第六个字符 System.out.println(charAt); } @Test public void startsAndEndsWidth(){ /* * boolean startsWith(String str) * 判断当前字符串是否是以给定的字符串起始的 * * boolean endsWith(String str) * 判断当前字符串是否是以给定的字符串结尾的 */ String str = "Hello World"; boolean bool = str.startsWith("Hello"); System.out.println("以Hello开头:" + bool); bool = str.startsWith("he"); System.out.println(bool); bool = str.endsWith("World"); System.out.println("以World开头:" + bool); bool = str.endsWith("LD"); System.out.println(bool); } @Test public void testToUpperCaseAndToLowerCase(){ /* * String toLowerCase() * 将当前字符串中的英文部分转换为全小写 * * String toUpperCase() * 将当前字符串中的英文部分转换为全大写 */ String str = "你好 HelloWorld"; String toLower = str.toLowerCase(); System.out.println(toLower); String toUpper = str.toUpperCase(); System.out.println(toUpper); /* * 该方法常被用来忽略大小写的字符串验证上 */ } @Test public void testValueOf(){ /* * static String valueOf() * 该方法用若干重载,用于将其他类型转换为字符串 */ int i = 123; String iStr = String.valueOf(i); iStr += 4; System.out.println(iStr); double d = 123.456; String dStr = String.valueOf(d); System.out.println(dStr); System.out.println(String.valueOf(true)); char[] c = new char[]{‘a‘,‘b‘,‘c‘,‘d‘,‘e‘}; String cStr = String.valueOf(c); System.out.println(cStr); } }
四、StringBuilder/StringBuffer测试
/** * StringBuilder * 其内部维护一个可变的字符数组,该类用于修改字符串使用 * @author Administrator * */ public class StringBuilderDemo { @Test public void testToString() { StringBuilder sb = new StringBuilder(); StringBuilder sb1 = new StringBuilder("HelloWorld"); //创建一个StringBuilder来修改字符串 StringBuilder strBu = new StringBuilder("学习Java"); String str = strBu.toString();//通过调用toString方法来获取内部表示的字符串 System.out.println(str); } @Test public void testStringBuilderMothod(){ /* * StringBuilder append(String str) * 向当前字符串末尾追加给定字符串的内容 * 返回值就是当前StringBuilder对象,就是this * 这样做是为了连续编辑操作 */ StringBuilder sb = new StringBuilder("学习java"); System.out.println(sb.toString()); sb.append("赢取。。。"); // sb.append(""); System.out.println(sb.toString()); sb.replace(8, sb.length(), "改变世界");//替换 System.out.println(sb.toString()); sb.delete(0, 8);//删除哪个区间的字符串 System.out.println(sb.toString()); sb.insert(0, "活着");//在哪里插入什么字符串 System.out.println(sb.toString()); sb.reverse();//反转字符串 System.out.println(sb.toString()); } }
标签:
原文地址:http://www.cnblogs.com/chuanqi1415583094/p/String.html