zoukankan      html  css  js  c++  java
  • Java 字符串

    字符串常量池

    常量池:是堆内存的存储区域, 当创建一个String对象时,假如此字符串值已经存在于常量池中,则不会创建一个新的对象,而是引用已经存在的对象
    !字符串一旦初始化就不可被改变:字符串常量池里面的值不可改变,并非字符串的引用不可改变

    		String s1 = "hello";    // 加入常量池
    		s1 += "world";          // 加入常量池,s1指向新生成的字符串,并且hello还在常量池中
    		System.out.println(s1);
    		String s2 = "hello";    // 并不加入常量池即可直接引用
    

    字符串判断

    		String s1 = "hello world";
                    
                    // 判断等串
    		s1.equals("hello world");//区分大小写
    		s1.equalsIgnoreCase("HELLO WORLD");//不区分大小写
    
                    // 判断包含
    		s1.contains("hello"); //true
    
                    // 判断开始/结束
    		s1.startsWith("hello"); //以hello开始
    		s1.endsWith("world");  //以world结束
    
                    // 判空
    		s1.isEmpty();//判断是否是空串
    

    字符串比较

    == 是比较引用是否相等, Object.equal()判断他们是否是值相等

                    //比较两个值一样的字符串
                    new String("test").equals("test") // --> true 
                    /比较字符串值一样,但不同的对象
                    new String("test") == "test" // --> false 
                    //比较字符串值一样,但不同的对象
                    new String("test") == new String("test") // --> false 
    
    		String s1 = "abc";
    		String s2 = "abC";
    		System.out.println(s1.compareTo(s2));//比较字符串,不同字符相减操作
    		System.out.println(s1.compareToIgnoreCase(s2));//同上不区分大小写
    

    字符串获取

    		String str = "你好世界heloworld";
    		
                    //返回字符串给定索引字符
    		System.out.println(str.charAt(0));    //'你'
    
    		//返回字符串第一次出现给定字符的位置,不存在返回-1
    		System.out.println(str.indexOf("l"));
    
    		System.out.println(str.indexOf("l",str.indexOf("l") + 1) );//从第一次出现的位置继续向后查找,包含当前位置
    		System.out.println(str.lastIndexOf("l"));//返回字符串最后一次出现给定字符的位置
    		
                    //字符串截取,包头
    		System.out.println(str.substring(4));
    		System.out.println(str.substring(4, 8));//包头不包尾
    

    字符串切割

    		String nameSz[] = name.split(",");// 根据分隔符分隔字符串
    		System.out.println(nameSz[0].toString());
    
    		String address = "  Anhui,Suzhou  ";
    		System.out.println(address.trim());// 去首尾空格
    

    字符串替换

    		String name="xyg,sll,sjl";
    		
    		//替换功能
    		String newName = name.replace(",", "||");//替换所有
    		System.out.println(newName);
    		System.out.println(name.replaceAll(",", " "));// 替换所有
    		System.out.println(name.replaceFirst(",", " "));// 替换第一个
    

    字符串转换

                    String name = "xyg,ssl,smt";
    
    		// 将字符串转换成字节数组
    		byte[] b = name.getBytes();
    		System.out.println(b);
    
    		// 将字符串转换为字符数组
    		char[] chName = name.toCharArray();
    		System.out.println("chName = " + chName[0]);
    
    		// 将字符数组转换为字符串
    		String strName = String.copyValueOf(chName);  //1.copyValueOf
    		strName = new String(chName);  //2.构造
    		strName = String.valueOf(chName); // 3.valueOf
    
    		// 将任意基本类型转换为字符串类型
    		float f = (float) 3.1415926;
    		strName = String.valueOf(f);
    		System.out.println(strName);
    
    		// 全转小写
    		System.out.println(name.toLowerCase());
    
    		// 全转大写
    		System.out.println(name.toUpperCase());
    

    StringBuffer 字符串缓存区类

    采用缓存区机制,其值可改变

    构造

    		// 方式1
    		// strBuf还是指向原来的对象
    		StringBuffer strBuf = new StringBuffer();
    		strBuf.append("world");
    		// 实际字符个数
    		System.out.println(strBuf.length());
    		// StringBuffer容量,默认16
    		System.out.println(strBuf.capacity());
    		System.out.println("===================");
    		
    		// 方式2
    		StringBuffer strBuf2 = new StringBuffer(100);//指定容量
    		System.out.println(strBuf2.length());
    		System.out.println(strBuf2.capacity());
    		System.out.println("===================");
    		
    		// 方式3
    		StringBuffer strBuf3 = new StringBuffer("helloworld");
    		System.out.println(strBuf3.length());
    		System.out.println(strBuf3.capacity());
    		System.out.println("===================");
    

    StringBuffer的功能

    		StringBuffer sb1 = new StringBuffer();
    		
    		// 追加
    		sb1.append("hello");
    		sb1.append(3.34).append(true).append(30); // 任意基本类型追加为String
    		System.out.println(sb1);
    
    		// 插入
    		sb1.insert(5, "world"); // 指定位置插入
    		System.out.println(sb1);
    		
    		// 删除
    		sb1.deleteCharAt(0); // 删除指定位置字符
    		System.out.println(sb1);
    		sb1.delete(0, 4);//指定开始结束位置删除,左闭右开
    		System.out.println(sb1);
    		
    		// 反转
    		sb1.reverse();
    		System.out.println(sb1);
    

    StringBuilder

    效率高 不同步数据 线程不安全,适用于单线程下在字符缓冲区进行大量操作的情况

    	public static void main(String[] args) {
    		StringBuilder sb = new StringBuilder();
    		sb.append("hello");
    		change(sb); // 传递的是引用,所以值改变了
    		System.out.println(sb);
    	}
    
    	private static void change(StringBuilder sb) {
    		sb.append("world");
    	}
    

    String、StringBuffer、StringBuilder之间的转换

    	public static void main(String[] args) {
    		String str = "helloString";
    		StringBuffer sbf = new StringBuffer("helloBuffer");
    		StringBuilder sbd = new StringBuilder("helloBuilder");
    		
    		StringToBuffer(str);
    		BufferToString(sbf);
    	}
    
    	private static void BufferToString(StringBuffer sbf) {
    		//1.String的构造方法
    		String str = new String(sbf);
    		//2.toString方法
    		sbf.toString();
    	}
    
    	private static void StringToBuffer(String str) {
    		//1.构造器
    		StringBuffer sbf = new StringBuffer(str);
    		//2.append方法
    		sbf.append(str);
    	}
    

    实例

    每隔4位数字插入一个空格

            /**
                1234 5678 8908 65
            */
            StringBuffer buffer = new StringBuffer(number1);
            int length = buffer.length();
            // 每隔4位数字插入一个空格
            for (int cnt = 4;cnt < length;cnt+=4){
                buffer.insert(cnt, ' ');
                cnt++; //插入空格时,需要偏移一位
                length++; //插入时长度也会改变
            }
    
  • 相关阅读:
    springmvc中request的线程安全问题
    日志帮助类
    模态框的实现
    getopts的使用方法
    自动生成头文件的脚本
    shell脚本中出现图形化界面
    Linux Centos关机命令
    Linux下IP的存储位置
    tar只解压tar包中某个文件
    Swift 笔记1
  • 原文地址:https://www.cnblogs.com/xiongyungang/p/12672156.html
Copyright © 2011-2022 走看看