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

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

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

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

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

    (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() 方法获取字符数组,如:

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()方法向其尾部追加新的字符串。

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

猜你喜欢

转载自my.oschina.net/u/3747963/blog/1857404
今日推荐