文档章节

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

海岸线的曙光
 海岸线的曙光
发布于 2018/07/16 17:32
字数 1862
阅读 23
收藏 2

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

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

© 著作权归作者所有

海岸线的曙光

海岸线的曙光

粉丝 46
博文 54
码字总数 59291
作品 0
通州
程序员
私信 提问
加载中

评论(0)

JNI之C语言简单回顾

一.C语言基本数据类型: c语言中 char, int, float, double, signed, unsigned, long, short and void // java 中的8大本数据类型和他们的长度 // byte 1 char 2 short 2 int 4 long 8 double......

长平狐
2012/09/03
82
0
java 7 入门书籍

一、Java从入门到精通 《Java从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Java语言进行程序开发需要掌握的知识。 《Java从入门到精通(第3版...

modernizr
2014/05/15
7.8K
9
Android JNI本地编程 快速入门

一、JNI(Java Native Interface) 1、什么是JNI: JNI(Java Native Interface):java本地开发接口 JNI是一个协议,这个协议用来沟通java代码和外部的本地代码(c/c++) 外部的c/c++代码也可以调...

天王盖地虎626
2019/01/22
17
0
python和java哈希值区分

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能
2018/06/25
0
0
Java学习手册:Java基础知识点(不断扩充更新中)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/MaybeForever/article/details/89186089 1、Java学习手册:Java基础知...

浩比浩比
2019/08/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Java Switch Case 条件判断

Java的 Switch Case 语句,可以理解为分支 例子 假设打麻将有四个人 编号为 1 2 3 4 对应名字为 张三,李四,王五,赵六 数据结构 switch(expression){ case value : //语句 ...

月小升
38分钟前
50
0
2020-02-22

tanglei302wqy/tlmall-springboot-ii axios配置及使用(发起请求时带上token)

miaojiangmin
47分钟前
49
0
基于进程退出代码退出Shell脚本

我有一个执行许多命令的shell脚本。 如果任何命令以非零退出代码退出,如何使shell脚本退出? #1楼 http://cfaj.freeshell.org/shell/cus-faq-2.html#11 如何在cmd1|cmd2获取cmd1的退出代码 ...

javail
49分钟前
68
0
网站被挂马该怎么彻底的解决 2020年技术篇分享

在网站运营以及优化这方面总是会有一些无所事事的人,冒着风险做各种各样的违规行为的工作,有的时候忽然发现自己的公司网站,就被他人直接挂了木马,那些超链接鼠标点击进来,全部都是灰色内...

网站安全
今天
52
0
php环境搭建+Hello World

1 概述 基础教程,搭建php入门基本环境.环境win10. 2 安装php 2.1 下载 官网点击这里 2.2 安装 其实只需要添加环境变量即可.win+Pause,高级系统设置: Path这里新建一个,刚才的php目录. 2.3 测...

氷泠
今天
52
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部