String类

String 类

  1. ** 概念**
    String 类的实例表示一个字符串,String 是一种不可变字符串,一对字符串进行改变操作,则创建一个全新的对象,然后把引用指向这个新的对象。
  2. 声明方式
String s = "abc";
String s = new String("abc");
//其他参考API手册
  1. 相等比较
public static void main(String[] args){
    		String s1 = "hello";
		String s2 = "hello";

		String s3 = new String("hello"); 
		String s4 = new String("hello"); 

		System.out.println( s1==s2);// true: 都引用常量
		System.out.println( s3==s4);// 无法编译优化,需要运行期决定 false
		System.out.println( s1==s3);// 无法编译优化,需要运行期决定 false
	
		String x1="a";
		String x2="b";
		String x3="a"+"b";
		String x4="ab";
		System.out.println(x3==x4);// true: x3: 为常量运算,编译可优化确定"ab"常量进入常量池 x4可以引用常量。
		
		String m1 = "i";
		String m2 = "love";
		String m3 = "you";
		String m4 = "iloveyou";
		String m5 = m1+m2+new String("you");
		System.out.println(m4==m5 ); // false: m5引用了变量,无法直接引用常量吃中的字符串对象
    
}
  1. String API
    为方便对字符串处理,String 类提供了大量的方法。需要注意的是这些方法都不会对字符串本身做修改,而是返回处理结果,或者处理完成后,返回处理后的新字符串。
	public static void main(String[] args) throws UnsupportedEncodingException {
		
		String str = "你要悄悄学python惊艳所以人!  pythonNB.mp4";
		 
		//使用字符串api来处理字符串
		//1. 获得长度 length():int 
		System.out.println( str.length()  );
		
		//2. 获得指定下标处的字符 charAt(int index):char
		System.out.println( str.charAt(1)  );
		
		
		//3. 查看字符串中时候包含 指定字符串内容 contains(String str):boolean
		System.out.println(  str.contains("python")  );
		
		 
		//4.把字符串转出字符数组 toCharArray():char[]
		char[] chs= str.toCharArray();
	    System.out.println( Arrays.toString(chs)   );
	    
	    
	    //5. 查询指定字符串的首次出现的下标  indexOf(String str):int
	    System.out.println( str.indexOf("py") );
	    // 从指定位置后查找
	    System.out.println(  str.indexOf("py", 8));
	    // 反向查找
	    System.out.println( str.lastIndexOf("py") );
	    // 反向查找,从指定位置前
	    System.out.println( str.lastIndexOf("py", 18) );
	    
	    
	    //6 去除字符串两端的空格 trim():String
	    System.out.println(str.trim() );
	 
	     
	    //7 把小写转成大写 toUpperCase():String
	    System.out.println( str.toUpperCase() );
	    
	    
	    //8 大写转小写 toLowerCase():String
	    System.out.println( str.toLowerCase() );

	    
	    
	    //9 判断字符串是否以某个字符串结尾 endsWith( String s ):boolean
	    System.out.println( str.endsWith( "mp4" ) );
	    
	    
	    //10 判断字符串是否以 某个字符串开始 startsWith(String s):boolean
	    System.out.println( str.startsWith("你")  );
	    
	    
	    //11.替换字符 replace(char oldChar, char newChar):String
	    System.out.println( str.replace('你', '我')  );
	    //         replace(String str, String str2):String
	    System.out.println( str.replace("python", "java") );
	    
	    String ss = "abcdefg12mly3s5";
	    //正则:用一个模式去匹配字符串是否符合这个规则 replaceAll(String reg, String newStr):String
	    System.out.println(  ss.replaceAll("[a-z]", "*")   );
	    
	    
	    //13 字符串拆分 split(String reg):String[]
	    String mm = "刘德华,歌手,50,香港";
	    
	    String[] info = mm.split(",");
	    
	    System.out.println(  info[0] );
	    
	    
	    // 14 字符串截取 
	    System.out.println( str.substring(5) );
	    System.out.println( str.substring(5, 10));
	    
	    
	    
	    // 15 字符串编码解码问题【防止乱码编码一致】
	    String dd = "奥利给";
	    byte[] bs = dd.getBytes();//[-80, -62, -64, -5, -72, -8]
         byte[] bs = dd.getBytes("UTF-8");//[-27, -91, -91, -27, -120, -87, -25, -69, -103]
	    System.out.println(Arrays.toString(bs)   ); 
	                                                
	    //编码
	    byte[] bbs = {-27, -91, -91, -27, -120, -87, -25, -69, -103};
	    String sss = new String(bbs, "utf-8");  
	}
  1. StringBuider
    可变字符串,内部维护了一个字符串缓冲区,可以实现在现有字符串基础上做修改,适用频繁修改字符串的场景
    java 中提供了两种可变字符串类型,他们的api完全兼容。
StringBuilder sb = new StringBuilder(); //创建一个空可变字符串

StringBuilder sb = new StringBuilder("abc")//创建一个初始化内容的可变字符串

StringBuilder JDK5 新增类 线程不 安全 执行效率高。适用于单线程环境,或者对数据一致性没有要求。

  1. StringUuffer
StringBuffer sb = new StringBuffer(); //创建一个空可变字符串

StringBuffer JDK1.0 就有, 线程安全 执行效率低,适用于多线程环境

  1. 常见API
package ch1;

public class StringBuilderAPI {

	public static void main(String[] args) {

		//创建方式:
		StringBuilder sb = new StringBuilder();//"床前明月光,疑是地上霜。"

		//追加
		sb.append("床前明月光,疑是地上霜。");
		sb.append("举头望明月,低头思故乡。");


		//插入
		sb.insert(0, "静夜思");
		sb.insert(3, "\n");

		//删除
		sb.deleteCharAt(  sb.indexOf("举")   );

		//替换
		sb.replace(sb.lastIndexOf("明月"),sb.lastIndexOf("明月")+"明月".length() , "太阳");

		//反转
		sb.reverse();

		System.out.println(sb);
 
		//String 与 StringBuilder 转换
		//1 .  StringBuilder 通过toString() 转成String
		String str = sb.toString();
		System.out.println(str);
		
		//2.  String 转 StringBuilder 通过 StringBuilder 构造器
		String ss= "小明鬼畜";
		StringBuilder sbb = new StringBuilder(ss);
		System.out.println(sbb);

	}
}
  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值