JAVA——Character&String&StringBuffer类

字符串在编程中很常用,Java中提供了很多方法,可以查看API文件

Character类

Java语言为内置数据类型char提供了包装类Character类。

char ch = 'a';
// Unicode 字符表示形式
char uniChar = '\u039A'; 
// 字符数组
char[] charArray ={ 'a', 'b', 'c', 'd', 'e' };
//装箱:将一个char类型的参数传递给需要一个Character类型参数的方法 
//原始字符 'a' 装箱到 Character 对象 ch 中
Character ch = 'a';
 
// 原始字符 'x' 用 test 方法装箱
// 返回拆箱的值到 'c'
char c = test('x');

String类(字符串的本质是字符数组)

  1. 创建字符串
        //1、直接赋值
        String s="Hello";
        //2、使用构造方法赋值 String(String original)
        String s2=new String("hello");
        //3、String(char[] value)
        char [] chs={'h','e','l','l','o'};
        String s3=new String(chs);
        //4、String(char[] value, int offset, int count)
        //offset 从第一个下标开始取
        //count 取多少个字符
        String s4=new String(chs,1,1);

直接赋值与new区别
直接赋值,是将“字符串”直接放入常量池中。所以只要字符串相同,指向就一样
new是在堆中开辟空间,new一下就对应一个地址,再指向常量池,所以就算赋的字符串相同,地址也不同。

  1. 连接字符串
//1、string1.concat(string2);
//2、"Hello," + " runoob" + "!"
  1. .length()方法返回字符串长度
  2. 遍历字符串
   String s="welcome to java world HHFGH";
   char [] chs=s.toCharArray();
   //第一种遍历字符串的方式
   for(int i=0;i<chs.length;i++){
       System.out.print(chs[i]);
   }
   //直接遍历字符串
   for(int i=0;i<s.length();i++){
        System.out.print(s.charAt(i));
   }
  1. ==与equal区别
    ==对于string来说是比较两者之间的地址
    equal才是真正比较两个字符串是否相等

  2. 一些常用方法

        String s="hello world java haha java";
        //获取字符串中的每个字符
        char c=s.charAt(6);
        //找大字符串中小字符串的第一次出现索引,如果没有,返回-1
        int index=s.indexOf("java");
        //indexOf(String str, int fromIndex)
        index=s.indexOf("java",index+1);
        //字符串截取
        String ss=s.substring(3);
        //截取指定的区间,[3,10)
        ss=s.substring(3,10);
        //比较时忽略大小写
        String s1="HELLO";
        System.out.println(s.equalsIgnoreCase(s1));
        //是否以...开头,一般用在判断姓名是否姓张....
        System.out.println(s.startsWith("l"));
        //是否以...结尾,一般用在判断文件是那种类型,.doc,.txt,.java
        System.out.println(s.endsWith("llo"));
        //判断字符串是否为空
        System.out.println(s.isEmpty());
        //trim去除字符串首尾空格
        System.out.println(s.trim().length());
        //字符串分割
        String names="jack,rose,tom,lucy,jhone";
        String [] strs=names.split(",");
        for(int i=0;i<strs.length;i++){
            System.out.println(strs[i]);
        }
        //字符串替换
        String ss="hello java i like java i enjoy java";
        System.out.println(ss.replace("java","c++"));
        System.out.println(ss.replaceAll("java","php"));
    }
注意】空字符串与空格不一样

StringBuffer & StringBuilder

String & StringBuffer & StringBuilder 区别

-String在进行连接时,在字符串常量池中将两个地址中的字符串连接后,赋给新地址,再回指给变量。原先字符串空间不会消失。

  • 在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象。即在连接字符串时,不开辟空间,直接在原先域上添加。
  • StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。StringBuilder 相较于 StringBuffer 有速度优势,推荐使用
  1. 字符串静态,不常修改,优先使用String。如常量的声明,少量的字符串操作(拼接,删除等)。
  2. 单线程情况下,如有大量的字符串操作情况,应该使用StringBuilder来操作字符串。不能使用String"+"来拼接而是使用,避免产生大量无用的中间对象,耗费空间且执行效率低下(新建对象、回收对象花费大量时间)。如JSON的封装等。
  3. 多线程情况下,如有大量的字符串操作情况,应该使用StringBuffer。如HTTP参数解析和封装等
public static void stringBuilderConcat(){
        StringBuilder sb=new StringBuilder();
        long start=System.currentTimeMillis();
        //10000次所消耗的时间2毫秒
        //6毫秒
        for(int i=1;i<=100000;i++){
            sb.append("hello");
        }
        long end=System.currentTimeMillis();
        //消耗时间
        long time=end-start;
        System.out.println("StringBuilder字符串拼接所消耗的时间为:"+time+"毫秒");
    }

    public static void stringConcat(){
        String str="";
        long start=System.currentTimeMillis();
        //10000次所消耗的时间371毫秒
        //23840毫秒
        for(int i=1;i<=100000;i++){
            str+="hello";
        }
        long end=System.currentTimeMillis();
        //消耗时间
        long time=end-start;
        System.out.println("String字符串拼接所消耗的时间为:"+time+"毫秒");
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值