奋斗黑马程序员----Java之String对象


----------android培训java培训、期待与您交流! ----------
 
/**Java之String类小结
 * 
 */
/**1,String对象
 * String对象的API解释:
 *    public final class String--extends Object -implements Serializable, 
 * Comparable, CharSequenceString 类代表字符串。Java 程序中的所
 * 有字符串字面值(如 "abc" )都作为此类的实例实现。 字符串是常量;它们的值
 * 在创建之后不能更改。字符串缓冲区支持可变的字符串。因为 String 对象是不
 * 可变的,所以可以共享
 * 
 * 
 * 在java中,字符串是一个特殊的“对象”,字符串一旦初始化就不可以改变
 *  String str = "abc";
 *  String str1 = new String("abc");
 * 有什么区别??
 */
public class StringDemo {
	public static void main(String[] args)
	{
		String s = new String();
		String s1 = "";
		System.out.println(s==s1);	//结果:false
		System.out.println(s.equals(s1));	//结果:true
		/*
		 * 上面两个是一回事,但下面的比上面的要简单的多
		 */
		/*
		 * 解读:String s1 = "abc";
		 *   其中,s1是一个类类型变量,"abc"是一个对象。一个特殊的对象。
		 * 只要用双引号引起来的,都是一个对象。。
		 * 字符串最大的特点在于:一旦被初始化,就不可以被改变。。
		 */
		String s2 = "abc";
		String s3 = new String("abc");
		System.out.println(s2==s3);		//false,s2和s3是不同的对象,所以不相等
		System.out.println(s2.equals(s3));	//equals,比较的是值,所以为true。
		//String类复写了Object类中的equals方法,该方法用于判断字符串是否相同
		
		/* 重点:
		 * s2和s3在使用起来是一样的,但是有区别:
		 *  s2在内存中有一个对象,s3有两个对象【"abc"是一个对象,new String()也
		 * 是一个对象,所以有两个对象】
		 */
		
		String s1 = "abc";
		String s2 = "abc";
		System.out.println(s1==s2);		//结果:true
		/*因为,当s1存储了一个"abc"时,常量池中就存在了“abc”,已经在内存中存在了,
		 *初始化s2时,发现内存中已经存在了,s2就不会再独立开辟内存空间,以节省内存. 
		 * 所以打印s1==s2时,会是true
		 */
	}
}

/**2,String常用功能:
 *  String类是用于描述字符串事物,操作字符串,它最清楚.
 * 那么它就提供了多个方法对字符串进行操作.
 * 
 * 常见的操作有:"abcde"
 * 1,获取:
 *  	int length()  返回此字符串的长度。 [数组的长度length不带括号"()"]
 *      char charAt(int index) 返回指定索引处的 char 值。 返回值类型是char类型的
 *      
 *  indexOf()系列:
 *      int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 
 *      int indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处
 * 的索引,从指定的索引开始搜索。 
 * 		int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。 
 * 		int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第
 * 一次出现处的索引,从指定的索引开始。
 * 
 * 	lastIndexOf()系列:
 * 		int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。 
 * 		int lastIndexOf(int ch, int fromIndex) 返回指定字符在此字符串中最后一
 * 次出现处的索引,从指定的索引处开始进行反向搜索。 
 * 		int lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。 
 * 		int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串
 * 中最后一次出现处的索引,从指定的索引开始反向搜索。 
 * 
 * 2.判断.
 * 		boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序
 * 列时,返回 true。(只能是串,不能使字符,否则报错);特殊之处,indexOf(str);可
 * 以索引str第一次出现的位置,如果返回-1,表示该str不存在字符串中,所以,也可以
 * 用于对指定字符串的判断是否包含。if(str.indexOf("aa")!=-1)	而且该方法,既可
 * 以判断,又可以获取出现的位置,
 * 		boolean isEmpty() 当且仅当 length() 为 0 时返回 true。
 * 		boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开始。  
 * 		boolean startsWith(String prefix, int toffset) 测试此字符串从指定索
 * 引开始的子字符串是否以指定前缀开始。
 * 	
 * 		boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 
 * 		boolean equals(Object anObject) 将此字符串与指定的对象比较。 
 * 		boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 
 * String 比较,不考虑大小写。 
 * 		 
 * 3,装换:
 * 		构造函数:String(char[]);
 * 		构造函数:String(char[] offset,coutn);将字符数组中的一部分转成字符串。
 * 
 * 		static String copyValueOf(char[] data) 返回指定数组中表示该字符序列的 String。 
 * 		static String copyValueOf(char[] data, int offset, int count) 返回
 * 指定数组中表示该字符序列的 String。(取子串 )
 * 		static String valueOf(基本数据类型   b) 返回 基本数据类型 参数的字符串表示形式。
 *  	char[] toCharArray() 将此字符串转换为一个新的字符数组。  
 * 
 * 		构造函数:String(byte[]);
 * 		构造函数:String(byte[] offset,coutn);将字节数组中的一部分转成字符串
 * 	 getBytes();系列:		
 * 		byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,
 * 并将结果存储到一个新的 byte 数组中。 
 * 
 * 		static String valueOf(int);	参数类型多样
 * 		static String valueOf(double);
 * 
 * 	特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
 * 
 * 4,替换:
 * 		String replace(char oldChar, char newChar) 返回一个新的字符串,它
 * 是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
 * 		String replace(CharSequence target, CharSequence replacement) 使
 * 用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 
 * 
 * 5,切割:
 * 		String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。 
 * 
 * 6,子串.获取字符串中的一部分。
 * 		String substring(int beginIndex) 返回一个新的字符串,它是此字符
 * 串的一个子字符串。
 * 		String substring(int beginIndex, int endIndex) 返回一个新字符串,
 * 它是此字符串的一个子字符串。(包含头不包含尾)
 * 
 * 7,转换,去除空格,比较
 * 		String toLowerCase() 使用默认语言环境的规则将此 String 中的所有字
 * 符都转换为小写。
 * 		String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字
 * 符都转换为大写。
 * 		String trim() 返回字符串的副本,忽略前导空白和尾部空白。(删除空格)
 * 		char[] toCharArray() 将此字符串转换为一个新的字符数组。    
 * 		int compareTo(String anotherString) 按字典顺序比较两个字符串。 (结果:
 * 如果,相等,则结果为0,如果大于参数,为正数;如果小于参数,结果<0)
 */
public class StringMethods {
	public static void main(String[] args)
	{
		//method_get();
		//method_is();
		//method_trans();
		//method_replace();
		method_other();
	}
	/**
	 * 获取方法
	 */
	public static void method_get(){
		String str = "abcdefighfijklmn";
		sop(str.length());		//str的长度
		System.out.println(str.charAt(5));	//结果:f,根据索引找字符,从0开始
		sop((str.charAt(4)));		//e
		sop(str.indexOf('i'));		//6
		sop(str.indexOf('i',7));	//10,从指定位置开始
		sop(str.indexOf("fig"));	//5
		sop(str.indexOf("fi",6));	//9
		sop(str.indexOf("kjdk"));	//找不到就返回-1
		sop(str.lastIndexOf("fi",14));	//9,反向索引
	}
	/**
	 * 判断字符串方法
	 */
	public static void method_is(){
		String str = "StringMethod.java";
		sop(str.contains("r"));	//要以字符串的形式传入,true
		sop(str.isEmpty());		//false
		sop(str.startsWith("str"));	//false
		sop(str.endsWith(".java"));	//true
		sop(str.startsWith("d.j",11));	//true
		sop(str.equals("stringMethod.java"));	//false
		sop("忽略大小写:"+str.equalsIgnoreCase("stringmethod.java"));	//true
	}
	
	/**
	 * 转换方法
	 */
	public static void method_trans(){
		char[] ch = new char[]{'a','b','3','d','i','0','k'};
		sop(new String(ch,1,5));	//b3di0,包含首,不包含尾
		String str = String.copyValueOf(ch,1,5);	//转换成字符串:b3di0
		sop(str);
		sop(String.copyValueOf(ch).getClass());	//java.lang.String
		
		char[] chh = str.toCharArray();	//将字符串转成数组
		for(int i=0;is2.length())?s1:s2;
		String min = (max == s1)?s2:s1;
		for(int x=0;x


----------android培训java培训、期待与您交流!----------

  详细请查看:http://edu.csdn.net/heima/

你可能感兴趣的:(奋斗黑马程序员----Java之String对象)