java字符串基本操作

1. 字符串是不变对象:字符串内容一旦创建,不可改变,若想改变某个字符串内容一定会创建新对象`

		String s1="123abc";
		String s2="123abc";
		String s3=new String("123abc");
		
		System.out.println(s1==s2);//true
		System.out.println(s1==s3);//false
		System.out.println(s1.equals(s3));//true
		
		s1=s1+"!";//创建新对象
		System.out.println(s1);//123abc!
		System.out.println(s2);//123abc
		System.out.println(s1==s2);//false
		/*
		 * 编译器的一个优化措施:
		 * 当一个计算表达式计算符两边都是字面量时,会直接计算结果,然后将结果编译到class文件中
		 * 所以下面代码在class文件中的样子是
		 * String s5="123abc";
		 */
		String s4="123"+"abc";//在生成class文件之前,编译器就把两个自变量相加算好了,得出123abc
		System.out.println(s4==s2);//true
		
		String str1="123";
		String str2="abc";
		String s5=str1+str2;//注意区分和上一段代码
		System.out.println(s5==s2);//false

2. int length(): 获取字符串长度,无论中文还是英文每个字符都是一个长度。

public static void main(String[] args) {
		String str="我爱Java";
		System.out.println(str.length());//6

	}

3. int indexOf(String str): 该方法用来查找给定字符串在当前字符串中的位置,该方法有几个重载方法。

		//			0123456879012345
		String str="thinking in java";
		
		//查找in在str字符串中的的位置,若没有会返回-1
		int index=str.indexOf("in");
		System.out.println("index "+index);//2  返回第一次出现in的首字母的位置
		
		int index1=str.indexOf("In");
		System.out.println("index "+index1);//-1  java区分大小写,找不到的话就返回-1
		
		/*
		 * 重载方法允许从指定的位置开始查找
		 */
		index=str.indexOf("in",3);
		System.out.println("index "+index);//5  从3位置开始找,但是找到的位置依然是整个字符串中的位置
		
		/*
		 * 查找最后一次出现指定字符串的位置
		 */
		index=str.lastIndexOf("in");
		System.out.println("index "+index);//9 最后一次出现in的位置是9

4. String substring(int start,int end): 截取字符串,从指定位置(start)开始截取到指定的位置(end),java api有一个特点,通常用两个数字表示范围时,都是含头不含尾的。

		//			0123456789012345
		String str="thinking in java";
		//截取ing
		String sub=str.substring(5,8);//含头不含尾,所以要到8处
		System.out.println("sub:"+sub);//sub:ing
		// 若只传入一个参数,这是从指定的位置开始截取到字符串末尾
		String host="www.didi.cn";
		sub=host.substring(4, 8);//截取第4位到第8位
		System.out.println(sub);//didi
		sub=host.substring(4);//截取第4位到结尾
		System.out.println(sub);//didi.cn

5. String trim(): 去除当前字符串两边的空白字符

		String str="  hello      ";
		String trim=str.trim();
		System.out.println(str);
		System.out.println(trim);

6. char charAt(int index): 获取当前字符串指定下标对应的字符

		//			0123456789012345
		String str="thinking in java";
		//查看第五个字符是什么
		char c=str.charAt(4);
		System.out.println(c);//k
		
		/*
		 * 检查一个字符串是否为回文  回文意思是正反读都一样
		 */
		//           01 234 567 8
		String info="上海自来水来自海上";
		for(int i=0;i<info.length()/2;i++){
			if(info.charAt(i)!=info.charAt(info.length()-i-1)){
				System.out.println("不是回文");
				return;
			}
		}
			System.out.println("是回文");

7. boolean startsWith(String str) boolean endsWith(String str) 判断当前字符串是否是以指定的字符串开始或结尾的

		//			0123456789012345
		String str="thinking in java";
		
		boolean starts=str.startsWith("thi");//注意大小写的问题
		System.out.println("starts:"+starts);//true
		
		boolean ends=str.endsWith("ava");
		System.out.println("ends:"+ends);//true

8. String toUpperCase() String toLowerCase(): 将当前字符串的英文转换为全大写或全小写

		String str="我爱Java";
		String upper=str.toUpperCase();
		System.out.println(upper);//我爱JAVA
		
		String lower=str.toLowerCase();
		System.out.println(lower);//我爱java

9. String提供了若干重载的静态方法,static String valueOf(XXX xxx): 该方法的作用是将Java中其他类型转换为字符串

		int a=1;
		String strA=String.valueOf(a);
		System.out.println(strA+1);//11
		
		double d=1.1;
		String strB=String.valueOf(d);
		System.out.println(strB+1);//1.11

10. 字符串拼接的性能问题

		String str="a";
		for(int i=0;i<1000000;i++){
			str+="a";
		}

11. StringBuilder: 提供了用于修改字符串内容的相关方法,其内部维护的是一个可变的字符数组,所以修改都是在当前对象内部完成的。当频繁修改字符串内容时应当使用当前类来完成.

		String str="努力学习java";
		/*
		 * 将String转换为StringBuilder,可以使用有参的构造方法
		 * StringBuilder也有无参构造方法,默认表示空字符串
		 */
		StringBuilder builder=new StringBuilder(str);
		
		/*
		 * 从StringBuilder转换为String,使用StringBuilder的toString方法即可
		 */
		str=builder.toString();
		/*
		 * StringBuilder append(String str)
		 * 向当前字符串末尾追加指定内容
		 * 有若干重载方法,参数类型不同,这些重载方法允许追加其他内容(先转换为字符串再追加)
		 * 
		 * “努力学习java,为了找个好工作!”
		 */
			builder.append(",为了找个好工作!");
			System.out.println(builder.toString());
			
		/*
		 * StringBuilder replace(int start,int end,String str)
		 * 将指定范围内的字符串替换为指定的内容。
		 * 
		 * “努力学习java,为了找个好工作!”改为“努力学习java,就是为了改变世界!”
		 * 
		 */
			builder.replace(9, 16, "就是为了改变世界");//含头不含尾
			System.out.println(builder.toString());
			
		/*
		 * StringBuilder delet(int start,int end)
		 * 将当前字符串中指定范围内的内容删除
		 * 
		 * “努力学习java,就是为了改变世界!”改为“,就是为了改变世界!”
		 * 
		 */
			builder.delete(0, 8);
			System.out.println(builder.toString());
			
		/*
		 *StringBuilder insert(int index,String str)
		 *将给定字符串插入到指定位置,原位置及后续字符串顺序向后移动。
		 * 
		 * “,就是为了改变世界!”改为“活着,就是为了改变世界!”
		 */
			builder.insert(0, "活着");
			System.out.println(builder.toString());
		
		/*  反转字符串
		 * “活着,就是为了改变世界!”改为“!界世变改了为是就,着活”
		 */
			builder.reverse();
			System.out.println(builder.toString());

你可能感兴趣的:(一个女菜鸟的Java逆袭之路)