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

    一、String 类

    1、创建对象

    public static void main(String[] args){
    		String str1 = "hello";
    		String str2 = "hello";
    		String str3 = new String("hello");
    		String str4 = new String("hello");
    		
    		System.out.println(str1 == str2);//true
    		System.out.println(str1 == str3);//false
    		System.out.println(str3 == str4);//false
    		/**
             * 1、使用String str1 = "hello";这种方式 
             *         第一次创建str1时,隐式的new一个字符串对象,在运行时常量池中开辟一个空间,来存放新创建的"hello"对象,str1中存放指向这个对象的引用
             *         第二次创建str2时,JVM会先在在常量池中查找是否存在相同的常量,若已经存在跟"hello"一样的对象,就直接引用了这个对象,如果没有还是会在运行时常量池中新new一个
             * 2、使用String str3 = new String("hello");这种
             *         不管堆里面有没有同样的对象,都会在堆内存中新建一个对象,所以str3 和 str4 总会是false
             */
    		
    		System.out.println(str1.equals(str3));//true
    		System.out.println(str3.equals(str4));//true
    		//String类中已经把equals方法重写过了,比较的是具体的值  
    		
    		
    		/**
    		 *String拼接
    		 */
    		String s1 = "a"+"b"+"c";
    	    String s2 = "abc";
    	    String s3 = "ab";
    	    String s4 = s3 + "c";
    	    System.out.println(s1==s2);//true
    	    System.out.println(s2 == s4);//false
    	    
    	    //先在常量池中创建 abc ,地址指向 s1,也指s2, 再创建 ab ,指向 s3,再创建s4,
    	    //对于 s4,其实是先创建StringBuilder(或 StringBuffer)对象,通过 append 连接得到 abc ,再调用 toString() 转换得到的地址指向 s3。
    	    //所以(s4==s2) 为 false
    	
    		 	
    		
    		
    	}
    

      

    String重写的equals方法

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = count;
            if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                return false;
            }
            return true;
            }
        }
        return false;
        }
    

      

    2、常用方法

    str : "1abc1239"
    str.length() :8
    str.indexOf("a") :1
    str.indexOf('b') :2
    str.indexOf(49) :0
    str.substring(3) :c1239
    str.substring(2, 5) :bc1
    str.trim() :1abc1239
    str.equals("abc123") :false
    str.equals("abc123") :false
    str.toLowerCase() :1abc1239
    str.toUpperCase() :1ABC1239
    str.charAt(2) :b
    str.split("c", 2) :
                     1ab
                     1239
    str.split("c", 1) :
                     1abc1239
    str.getBytes() :
                     49
                     97
                     98
                     99
                     49
                     50
                     51
                     57

     ##注意

    str.indexOf(49) :0
    这里的index(int)里的int值注意一下
    贴一个链接,详细

    3、String.format()方法

    有两个重载:

    String.format(String format, Object... args)
    String.format(Locale locale, String format, Object... args)

    重点提一下 format 参数的格式:

    %[argument_index$][flags][width][.precision]conversion

    1、%:必填

    2、[argument_index$]:从1开始取值,表示的是拿后面的args中的第几个参数来格式化,默认是按照参数顺序输出

    System.out.println(String.format("你好,这是%s,那是%s!", "anna","beta"));//默认按顺序
    System.out.println(String.format("你好,这是%2$s,那是%1$s!", "anna","beta"));//按照自定义的顺序
    
    /**
    * 你好,这是anna,那是beta! 你好,这是beta,那是anna!
    */

      

    3、[flags]标识:控制输出格式,比如左对齐,三个数用逗号隔开,少位补0等

    •  '-'    在最小宽度内左对齐,不可以与"用0填充"同时使用
    •  '#'   只适用于8进制和16进制,8进制时在结果前面增加一个0,16进制时在结果前面增加0x
    •  '+'   结果总是包括一个符号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)
    •  ' '    正值前加空格,负值前加负号(一般情况下只适用于10进制,若对象为BigInteger才可以用于8进制和16进制)
    •  '0'    结果将用零来填充
    •  ','    只适用于10进制,每3位数字之间用","分隔
    •  '('    若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(同'+'具有同样的限制)
    System.out.println(String.format("%-3d", 123456789));//123456789
    System.out.println(String.format("%011d", 123456789));//00123456789
    System.out.println(String.format("%#o", 123456789));//0726746425
    System.out.println(String.format("%#x", 123456789));//0x75bcd15
    System.out.println(String.format("%+d", 123456789));//+123456789
    System.out.println(String.format("%(d", -123456789));//(123456789)
    System.out.println(String.format("%,d", 123456789));//123,456,789
    

      

    4、[width]最小宽度:  输出最小宽度,例如5

    5、[.precision] :只有传入参数是浮点数时才有用,传入整数或者日期会抛异常(注意这里前面有个 . 

    System.out.println(String.format("%,10.4f", 12345.6789456));//12,345.6789
    System.out.println(String.format("%.2f", 12345.6789456));//12345.68
    

      

    6、conversion转换格式 : 如上转换符所示,s/f等

    转  换  符

    说    明 

    示    例

    %s

    字符串类型

    "mingrisoft"

    %c

    字符类型

    'm'

    %b

    布尔类型

    true

    %d

    整数类型(十进制)

    99

    %x

    整数类型(十六进制)

    FF

    %o

    整数类型(八进制)

    77

    %f

    浮点类型

    99.99

    %a

    十六进制浮点类型

    FF.35AE

    %e

    指数类型

    9.38e+5

    %g

    通用浮点类型(f和e类型中较短的)

     

    %h

    散列码

     

    %%

    百分比类型

    %n

    换行符

     

    %tx

    日期与时间类型(x代表不同的日期与时间转换符

     

     

    conversion差不多看看就行,应该用得多的也就 s/f 啥的  

     

    参考文档:

    https://blog.csdn.net/jiangyu1013/article/details/52607257

    http://kgd1120.iteye.com/blog/1293633

    http://www.runoob.com/java/java-string.html

    二、StringBuilder和StringBuffer

    1、定义

    可变字符串

    2、String、StringBuilder和StringBuffer 异同

    String:字符串常量,不可变,底层用于存放字符的数组是final的,因此只能赋值一次,不能再更改;

    StringBuilder:字符串变量,线程不安全,也因此性能高一点,所以单线程操作大量数据就用这个;

    StringBuffer:字符串变量,线程安全,可将字符串缓冲区安全的用于多个线程,所以多线程操作大量数据用这个;

    3、StringBuffer常用方法

    两个可变字符串差不多,最重要的是 toString() 方法,转换成 String 类型;

    StringBuffer sb = new StringBuffer();
    		sb.append("abc123");
    		System.out.println(sb.toString());//abc123
    		sb = sb.reverse();
    		System.out.println(sb.toString());//321cba
    

      

    -------------------------------------------------------------------------------------------------------------------------------------------------------------- 白云苍狗时光飞,嘻嘻哈哈一生追。哈!
  • 相关阅读:
    vue this.$refs 获取的值为undefined?
    如何调用 vuex
    git 更新远程分支列表
    wordpress 支持上传中文名称文件
    wordpress 修改默认分页条数
    wordpress 不用插件添加友情链接
    wordpress 代码获得菜单的方法
    wordpress 添加友情链接
    【转】 WordPress数据库及各表结构分析
    WordPress 安装教程
  • 原文地址:https://www.cnblogs.com/sangong/p/9440175.html
Copyright © 2011-2022 走看看