Java语言学习(七):字符串的常见使用

    Java中字符串的使用非常常见,也是不可避免的,好比:格式化、大小写转换等等,下面就这些常见的使用来讲下字符串。html

    在使用前,必需要理解一点:字符串是不可变的对象,意味着每当调用字符串对象的方法操做字符串时,都将产生一个新的字符串对象,而不是更改原来的字符串对象。前端

    (1)任务:理解字符串操做java

    (2)工做准备:字符串对象的方法 toUpperCase()和 toLowerCase()jquery

    (3)编程:正则表达式

public class StringTest {
    public static void main(String[] args) {
        String str = "AbcdEFg";
        //操做前
        System.out.println("操做前字符串:"+str);
        //大写->小写
        System.out.println("大写转小写后字符串:"+str.toLowerCase());
        //小写->大写
        System.out.println("小写转大写后字符串:"+str.toUpperCase());
        //操做后
        System.out.println("操做后字符串:"+str);
    }
}

    (4)运行:输出操做先后的字符串编程

    经过上面的操做能够看出:字符串对象自己并无改变。后端

    字符串是由多个字符组成的,灵活的运用字符数组能够实现复杂的字符串操做,使用字符串对象的 toCharArray() 方法获取字符数组,如:api

String str = "AbcdEFg";
char[] charArray = str.toCharArray();
for(char c : charArray){
    System.out.print(c);
}

    字符串的格式化操做也是很经常使用的,如 日期的格式化、货币的格式化等,下面以日期格式化操做为例:数组

//日期格式化
Date date = new Date();
System.out.println("日期原输出格式:"+date);
System.out.println("日期时间戳输出格式:"+date.getTime());
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str1 = sf.format(date);
System.out.println("日期格式化输出格式:"+str1);

    输出为:安全

日期原输出格式:Mon Jul 16 14:42:57 CST 2018
日期时间戳输出格式:1531723377368
日期格式化输出格式:2018-07-16 14:42:57

    这里的SimpleDateFormat类是对日期时间格式化,格式如上所示,固然,也能够格式化成其余日期格式,你们能够本身试一试,这里关于日期时间的操做不作详述。

    在以前的博客中提到过:Java的基本数据类型可使用 “==” 来判断是否相等,对于Java类建立的对象使用 “==” 判断的是两个对象的内存地址,方法equal()能够判断两个字符串对象的值是否相同。看下面的实例:

String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
System.out.println(s1==s2);
System.out.println(s1==s3);

    输出为:

true
false

    为何等式1成立,等式2不成立?

    由于在Java虚拟机中有一个保存字符串常量的池,会记录全部字符串,提升字符串应用效率,并且字符串池中不会保存重复的字符串,因此等式1中s1和s2引用的是同一个字符串,内存地址相同;使用 new 建立的字符串会开辟新的内存空间,因此等式2中s1和s3引用的不是同一个字符串,则内存地址不一样。

    正则表达式在字符串中也是常常用到的,如 E-mail、身份证、手机号码等。它一般被用于判断语句中,来检查某一字符串是否知足某一格式。它是含有一些特殊意义字符的字符串,这些特殊字符称为元字符,你们能够自行百度查看这些元字符的含义和在表达式中的使用,参考文章:正则表达式手册。下面经过常见的正则实例来讲下:

//正则表达式-固定电话号码
String phone = "0551-4991032";
String regex = "^(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$";
if(phone.matches(regex))
   System.out.println(phone+"是合法的电话号码");
else
   System.out.println(phone+"不是合法的电话号码");
//正则表达式-手机号码
String phone1 = "13331234032";
String regex1 = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$";
if(phone1.matches(regex1))
   System.out.println(phone1+"是合法的手机号码");
else
   System.out.println(phone1+"不是合法的手机号码");

    Java中提供了Pattern用于正则表达式的编译表示形式,该类的静态方法matches()能够执行正则表达式的匹配。正则表达式既能够在java中使用,也能够在js中使用,很是方便、快捷。

    关于字符串的操做有不少,像类型转换、字符串截取、字符串替换等,如字符串转换成整数:

String s = "1024";
int _s = Integer.parseInt(s);
System.out.println(_s);

    Integer类是基本类型中int类型的包装类,能够将基本类型转换成引用类型。还有其余的包装类,如:byte的包装类是Byte,short的包装类是Short,long的包装类是Long等,在各个包装类中,定义了一些经常使用的域和方法。全部包装类的对象都不能使用“==”来进行比较,都属于引用类型,但每一个包装类中都定义了compareTo()方法,可使用其比较相同类型的对象,根据返回值来肯定结果:负数表示小于,0表示等于,正数表示大于。另外,包装类重写了从Object类继承的equals()方法,可使用其比较两个引用类型是否相等。

    在字符串操做中,有split()方法用于拆分字符串,substring()方法用于截取字符串,replace()方法替换字符串等等,字符串对象为开发者提供了不少方便实用的方法。

    Java是一种强类型语言,当定义变量时,须要先指明类型。对于数字基本类型,其取值范围是有限制的,如 byte类型范围为-128~127,在编程中要注意避免范围不对等的问题。

    字符串是程序开发中使用最频繁的数据,在Java中字符串是String类的对象,而大量字符串操做很是耗时,所以,对于大量的字符串操做,应使用StringBuilder字符串构建器来完成,它的效率远远高于String类,但它对于线程来讲是不安全的,适用于单任务的字符串操做,应用于多线程中会涉及异步访问的安全性。Java早期版本提供的StringBuffer类能够应用于多线程,比StringBuilder稍微慢一些,但差距很小,你们在开发时应灵活运用。

        字符串操做中,trim()方法能够去除字符串对象前端和后端的全部空格,但字符串中间位置的空格则没法处理。下面将使用StringBuilder来便捷、高效的操做字符串:

//去掉字符串中全部空格
String text = "Java 应用      程序  !!!";
StringBuilder sb = new StringBuilder();
for(int i=0;i<text.length();i++){
   //获取每一个字符并过滤空格
   char c = text.charAt(i);
   if(c == ' ')
      continue;
   //追加非空格的字符到字符构建器中
   sb.append(c);
}
//输出过滤后的字符串
System.out.println(sb);

    输出为:

Java应用程序!!!

    这里构建器的append()方法向其尾部追加新的字符串。

    以上是对字符串的常见使用,未说到的之后再补充。

相关文章
相关标签/搜索