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()方法向其尾部追加新的字符串。
以上是对字符串的常见使用,未说到的之后再补充。