String类Stringbuffer类的简单方法

system类的一些问题


long a = System.currentTimeMillis();

System.currentTimeMillis()这个方法是显示当前时间与协调世界时 1970 年 1 月 1 日午夜之间的时间差(以毫秒为单位测量)。

int[] arr1 ={1,2,3,4,5,6}; 
int[] arr2 ={1,1,1,1,1,1};
System.arraycopy(arr1,i,arr2,j,6);

以上是数组的复制功能,从arr1数组的下标第i处开始复制到arr2下标的第j处,长度为arr1.length-1

System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));

将数组转换为字符串输出

System.out.println(System.currentTimeMillis());
long b = System.currentTimeMillis();
System.out.println("这段代码用时"+(b-a));

这一行用b-a就可以求出这段代码运行的用时,需要注意的是以毫秒为单位,如果这段代码运行时间小于一毫秒,则b-a可能等于0,也可能等于1.

System.out.println(System.getenv());

显示目前系统的信息

Date d1 = new Date(111111111);
Date d2 = new Date(111111112);
System.out.println(d1.before(d2));  //结果true
System.out.println(d1.after(d2));   

before和after相似,都是比较2个时间的早晚 ,返回boolean型

System.out.println("user.dir="+System.getProperty("user.dir"));

项目目录

System.out.println("user.name="+System.getProperty("user.name"));

使用者姓名

System.out.println("os.arch="+System.getProperty("os.arch"));

系统位数

System.out.println("os.version="+System.getProperty("os.version"));

返回版本

System.out.println(System.getProperty("user.dir"));

获取指定的属性

System.out.println(System.getProperties());

获取当前的系统属性


String类


初始化
char[] shu = {'a','b','c','d'};
String s1 = new String(shu);//分配一个新的String对象,使它代表字符数组参数包含的字符序列
System.out.println(s1);

结果:abcd

String s2 = new String(shu,0,3);//分配一个新的String对象,使它包含来自字符数组参数中子数组的字符
System.out.println(s2);

结果:abc

String s3 = new String(s2);//初始化一个新的String对象,使其包含和参数字符串相同的字符序列
System.out.println(s3);

结果:abc

当字符串与其他类型值进行连接运算时,Java自动将其他类型值转换为字符串。

int i = 10;String str = "i="+i;

System.out.println(str);

结果:i=10
System.exit(0); //退出程序

String s4 = new String("abcd12");
System.out.println(s4.length()+" "+s4.charAt(2));

字符串.length()求字符串长度,字符串.chAt(i)求字符串第i个字符——结果是6 c

String s5 = s4.substring(2);
System.out.println(s5);

字符串.substring(i)从i位置起在字符串中取出剩余的字符串作为一个新的字符串—-cd12

String s6 = s4.substring(2, 4);
System.out.println(s6);

字符串.substring(i,d)从i位置起到d(不包含d)结束,在字符串中取出剩余的字符串作为一个新的字符串——cd

    String s7 = new String("abcde");
    String s8 = new String("abcdE");
    System.out.println(s7.equals(s8));//String类重写equals()
    //false
    System.out.println(s7.compareTo(s8));
    //32

该方法比较两个字符串,其比较过程实际上是两个字符串中相同位置上的字符按Unicode中排列顺序逐个比较的结果。如果在比较过程中,两个字符串是完全相等的,compareTo方法返回0;如果在比较过程中,发现了不同的地方,compareTo方法返回一个大于0的整数,否则返回一个小于0的整数

    System.out.println(s7.compareToIgnoreCase(s8));//忽略字母大小写的区别
    //0
    System.out.println(s7.concat(s8));//abcdeabcdE

该方法的参数为一个String类对象,作用是将参数中的字符串str连接到原来字符串的后面

    String s9 = s7.concat(s8);//abcdeabcdE
    System.out.println(s9.indexOf('c'));//2

该方法用于查找当前字符串中某一个特定字符ch出现的位置。该方法从头向后查找,如果在字符串中找到字符ch,则返回字符ch在字符串中第一次出现的位置;如果在整个字符串中没有找到字符ch,则返回-1。

    System.out.println(s9.indexOf('c',5));//7

该方法和上一种方法类似,不同的地方在于:该方法从fromIndex位置向后查找,返回的仍然是字符ch在字符串第一次出现的位置。

    System.out.println(s9.lastIndexOf('c'));//7

该方法从字符串的末尾位置向前查找,返回的仍然是字符ch在字符串第一次出现的位置。

    String s11 = new String("aBcDe");
    System.out.println(s11.toLowerCase());//abcde

该方法将字符串中所有字符转换成小写,并返回转换后的新串。

    System.out.println(s11.toUpperCase());//ABCDE

该方法将字符串中所有字符转换成大写,并返回转换后的新串。

    String s12 = new String("aaBBccBB");//aaBBffBB
    System.out.println(s12.replace('c', 'f'));

该方法用字符newChar替换当前字符串中所有的字符oldChar,并返回一个新的字符串。

    System.out.println(s12.replaceFirst("BB","ee"));//aaeeccBB

该方法用字符串replacement的内容替换当前字符串中遇到的第一个和字符串regex相一致的子串,并将产生的新字符串返回。

    System.out.println(s12.replaceAll("BB", "ee"));//aaeeccee

该方法用字符串replacement的内容替换当前字符串中遇到的所有和字符串regex相一致的子串,并将产生的新字符串返回。

    String s13 = new String("xxx");
    char[] ch1 = new char[s13.length()];
    s13.getChars(0,3,ch1,0);

将字符串s13从0到3的值存放到字符数组ch1中
求字符串长度 字符串.length();

    String s14 = "Java";
    String s15 = new String("Java");
    String s16 = s14.intern();
    if(s14==s16){  //地址值相同
            System.out.println("s16==s15");
    }
    else{
            System.out.println("s14!=s15");
    }
    if(s14.equals(s15)){
            System.out.println("s14 equals s15");
    }else{
        System.out.println("s14 not equals s15");   
    }

结果s16==s15
s14 equals s15


String和StringBufer

使用String类进行字符串拼接效率较低,每次在字符串后面添加字符时,字符串对象需要新的存贮空间来存储新的字符串。若添加字符串,则意味着需要一次次重新分配空间。


使用StringBuffer类可以避免这个问题。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
在StringBuffer类中只能用append()方法来拼接

    StringBuffer s17 = new StringBuffer(s15);
    StringBuffer s18 = new StringBuffer(3);
    //注意:不能像String对象那样只使用字符串做初始值。

修改一个StringBuffer类的对象不用再创建一个新的字符串对象,而是直接操作原字符串
分配内存时,除去字符所占空间外,再另加16个字符大小的缓冲区
StringBuffer的长度是指存储在其中的字符个数,容量是指缓冲所能容纳的最大字符数

    System.out.println(s17.length());//返回当前StringBuffer类对象包含的字符个数。
    //4
    System.out.println(s17.capacity());//返回当前StringBuffer类对象分配的字符空间的数量。
    //20

    StringBuffer s19 = new StringBuffer("abcdef");
    System.out.println(s19.delete(1,3));//删除从start到end-1的字符
    //adef
    System.out.println(s19.reverse());//字符串反转
    //feda

如果你的字符串经常会发生改变,那么最好是用StringBuffer,如果一旦定义了之后就很少改变这个字符串的值,那么就用String

因为一旦定义了一个String之后,如果改变它的内容,那么需要在内存地址中新建一个位置给新的内容, 这样的话,如果改动很频繁的话,就会对内存造成很大的消耗,而用StringBuffer的话,不管你怎么改动里面的内容,在内存中只是那么一块,不用消耗多的内存

Java 中 StringBuffer 和 String 是有一定的区别的,首先,String 是被 final 修饰的,他的长度是不可变的,就算调用 String 的

concat 方法,那也是把字符串拼接起来并重新创建一个对象,把拼接后的 String 的值赋给新创建的对象,而 StringBuffer 的长度是可变的,调用StringBuffer 的 append 方法,来改变 StringBuffer 的长度,并且,相比较于 StringBuffer,String 一旦发生长度变化,是非常耗费内存的!
String 长度大小不可变

StringBuffer 和 StringBuilder 长度可变
StringBuffer 线程安全 StringBuilder 线程不安全
StringBuilder 速度快

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值