`
897371388
  • 浏览: 529663 次
文章分类
社区版块
存档分类
最新评论

Java菜鸟之字符串(五)

 
阅读更多
Java中的字符串当做对象来处理。java中提供了String类,StringBuild类和StringBuffer来实现对字符串的处理。通过String类创建的对象时值不可以再改变,而StringBuild类和StringBuffer类可以对于字符串灵活的处理。首先在这里先了解一下String对象的声明和初始化。

一:String的声明以及初始化

String的声明格式有两种,格式如下:

String s = "hello";

String s1 = new String("hello");

String s2 = "hello":

这两种声明方式是等价的,但是在编程中一般使用的是第一种方式,下面来看一下这个两个不同。

第一种方式是 先在栈中声明一个s对象, 之后把堆内中的hello的引用指向赋给s。而第二种方式是先通过new关键字声明一个hello,在堆中分配内存,之后再为s在堆中分配一个空间,让s指向新分配的堆内存hello。第二种方式容易造成垃圾的内存。同时重点说的是s和s1他们是相等,他们指向的是堆中同一个地址。具体如图:

也可以通过代码来看一下如下:

public class TestString{
    
	public static void main(String args[]){
	        String s1 = "hello" ;//声明s对象
		String s2 = s1 ;
		String s3 = new String("hello");//声明一个s1的对象
                System.out.println("s1,s2,s3地址的比较:");
                //s == s1 比较的是它们的地址是否相同
 System.out.println("s1-->>s2 = "+(s1==s2));
 System.out.println("s1-->>s3 = "+(s1==s3));
 System.out.println("s2-->>s3 = "+(s2==s3));
 System.out.println("s1,s3,s2内容的比较:");


                          
  //equsls 方法比较的是对象的内容是否相同
System.out.println("s1.equals(s2) = "+s1.equals(s2));System.out.println("s1.equals(s3) = "+s1.equals(s3));System.out.println("s2.equals(s3) = "+s2.equals(s3));}}

     输出的结果如下:

s1,s2,s3地址的比较: s1-->>s2 = true s1-->>s3 = false s2-->>s3 = false s1,s3,s2内容的比较: s1.equals(s2) = true s1.equals(s3) = true s2.equals(s3) = true

对于equals()方法是比较字符串的内容是否相等,在下面会详细介绍的。

在学习字符串时需要记住字符串的内容定义之后不可以改变,具体解释如图:


       二:String类的主要方法
          String 类是java.lang包下的一个类,类中提高了对于字符串处理的方法,主要有截取,搜索,比较,判断结尾和其他类型转换的方法,在这里主要了解一下常用的处理字符串的方法。 
2.1 字符串的长度 length()方法
  length方法的作用主要是来计算String 的长度。在这里需要注意的是在就算字符串的长度时,里面的空格也包括。
2.2 字符串的比较compareTo()方法,equals()方法
在Java中提供了许多进行比较字符串的方法,在这里主要介绍equals()方法和compareTo()方法。equsls方法主要比较的是字符串中的内容是否相等,返回的是布尔值,true 或者false。而第二中compareTo方法是按照字典的顺序比较两个字符串,该比较基于字符串的各个字符的Unicode值,返回的值是正数,负数或者0.如果字符串比第二个字符串较大则正数,反之为负数。相等为0.当然也可以通过==来判断字符串是否相等。值得注意的是“==”判断字符串不仅仅判断内容是否相等而且和判断它们的地址是否相等。下面来看一下这两个方法的使用。

2.21 equals()方法
equals方法主要比较的字符串的内容是否相等,覆盖了Object类中的equals方法。主要两种方法,一个是比较内容区分大小写,一种是不区分大小写。两种方法的定义如下:
public boolean equals(Object anobject) ;
public boolean equalsIgnoreCase(Object anobject);
第一种方法是比较此字符串与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的String 对象时,结果才为true。
第二种方法是将此 String 与另一个 String 进行比较,不考虑大小写。如果两个字符串的长度相等,并且两个字符串中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。
在忽略大小写的情况下,如果下列至少一项为 true,则认为 c1 和c2 这两个字符相同。 
这两个字符相同(使用 == 运算符进行比较)。 
对每个字符应用方法 Character.toUpperCase(char) 产生相同的结果。
对每个字符应用方法 Character.toLowerCase(char) 产生相同的结果。
参数:anotherString - 与此 String 进行比较的 String。Character.toLowerCase(char)的方法是把字符串转换成小写。Character.toUpperCase(char)的方法是把字符串转换成大写。在下面会介绍到。
来看一下这两个方法的应用。
String s = "java"; 
String s1 = "java";
String s2 = "JAVA";
String s4 = "hello";
System.out.println("s1与s的比较   =  " + s.equals(s1));
System.out.println("s1与s2的比较  =  " + s.equals(s2));
System.out.println("s与s2的比较  =  " + s.equalsIgnoreCase(s1));
System.out.println("s1与4的比较  =   " + s1.equals(s4));
运行的结果为:
s1与s的比较   =  true 
s1与s2的比较  =  false 
s与s2的比较  =  true 
s1与4的比较  =   false
2.22 compareTo()方法
compareTo()方法主要是依据字符串在字典中的顺序来比较的。该比较基于字符串中各个字符的 Unicode 值。将此String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象在参数字符串之前,则比较结果为一个负整数。如果按字典顺序此String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;方法的定义如下:
public int compareTo(String anotherString)
public intcompareToIgnoreCase(String anotherString)
第二个方法是不考虑大小写的比较此方法返回一个整数,它的正负号是调用compareTo 的正负号,调用时使用了字符串的规范化版本,其大小写差异已通过对每个字符调用Character.toLowerCase(Character.toUpperCase(character)) 得以消除。注意的是这个比较不考虑语言环境,因此在某些特定语言环境下可能造成不良理想的排序。
String s = "java"
String s1 = "java";
String s2 = "JAVA"
String s4 = "hello"
System.out.println("s1与s的比较   =  " + s.compareTo(s1));
System.out.println("s1与s4的比较  =  " + s.compareToIgnoreCase(s4));
System.out.println("s与s2的比较  =  " + s.compareTo(s2));
System.out.println("s与s1的比较  =  " +(s==s1));
System.out.println("s与s1的比较  =  " +s==s1);
结果输出结果:
s1与s的比较   =  0 
s1与s4的比较  =  2 
s与s2的比较  =  32
s与s1的比较  =  true
false
在这里需要注意的是红色的部分,第一个红色的结果为true而第二个结果为false,"s与s1的比较  =  " +s 连接之后再与s1比较,所以结果为false
2.3 获取字符在字符串的位置的索引
Java中提供了许多获取字符在字符串位置索引的方法,例如indexOf(String ch),lastIndexOf()等方法。在这里来看一下着两个方法。
2.31 
indexOf(String ch)方法
indexOf(int ch)方法主要是实现获取字符第一次在字符串出现的索引,索引值从0到字符串的长度-1,如果没有在返回-1.方法定义为 
public int indexOf(String ch)
获取字符所在字符串的索引也可以从指定的位置开始查找,需要使用的是indexOf(String ch,
int fromIndex)方法,方法定义如下:
public int indexOf(String str,int fromIndex)
    从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。存在在返回所在的索引值,需要注意的是字符串的索引从0开始。如果不存在在返回-1.
    lastIndexOf
方法的定义是 public int lastIndexOf(String str)
    主要的作用是返回在此字符串中最右边出现的指定子字符串的索引
    返回值:
    如果在此对象中字符串参数作为一个子字符串出现一次或多次,则返回最后一个这样的子字符串的第一个字符。如果它不作为一个子字符串出现,则返回 -1。
    lastIndexOf(String ch,int fromIndex)
   这个方法是从指定的索引位置开始查找,返回在此字符串中最后一次出现的指定子字符串的索引。
    2.4 截取字符串 substring
    在java中有时需要获得字符串中一部分的字符,例如 获得"hello,java"中java这个字符串。对于这样的不要使用所有的字符串,java提供了两种方法来实现这个功能。方法的定义如下:
     public String substring(int beginIndex)
     public String substring(int beginIndex,int endIndex)
     publicStringsubstring(int beginIndex) 
     这个方法是返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。其中包括从beginindex索引出的字符。截取字符串时当索引位置不正确是,会抛出
IndexOutOfBoundsException异常,代表的是索引值为负或者超出字符串的最大索引值。
       
      public String substring(int beginIndex,int endIndex)
     这个方法是获取从指定的索引值开始的字符到结束位置的索引-1的字符。字符的长度为
endIndex-1 - beginIndex 。重点注意的是最好的endIndex位置的字符不包括。




分享到:
评论

相关推荐

    xml与实体类转换工具

    XML与实体类的相互转换工具,util是工具类,MyTest包含实体类转xml字符串以及XML字符串转实体类的方法,需要引入外部依赖或jar包,亲测可用

    经典Java入门教程超清晰PDF

    包含:Java语言基础,编程环境的搭建,数据和运算符等基本的语法规则,再讲到数组,字符串,类;最后讲解了一些高级的编程技术:对象,包,继承,接口,内部内,线程等。绝对经典的入门级的Java教程。

    java程序JTable查询界面sql2005数据库

    java写的基于JTable的一个简单查询界面,链接的是sql2005数据库。 需要加载sqljdbc4.jar 压缩包里面有 本人多年菜鸟 里面有java生成jar...exe4j怎么用百度下吧 已经sql数据库里面的字符串与datetime类型的相互转换都有

    BinaryOrStrToTransition.java

    工具类:主要是字符串和二进制编码的相互转换

    阿拉伯数字转化汉字

    阿拉伯数字金额转换成汉字金额,比如1000.00 转换成 壹仟元。

    TokenUtil2.java

    这个工具类可以直接将一个对象加密为token字符串,反之可以将一个有效token解密并返回直接类型的对象

    自定义日志脱敏组件,简单3 步完成 Spring Boot 的日志脱敏

    本组件支持的脱敏数据类型:八大基本类型及其包装类型、String类型、Map、List、JSON字符串、项目中的POJO对象。 注:Map、JSON、List、POJO、List对象的脱敏处理需要配置其对应的字段名即可,无法处理List<八大类型...

    全龄段友好的C#.NET万能工具库

    全龄段友好的C#.NET万能工具库,不管你是菜鸟新手还是骨灰级玩家都能轻松上手,...硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展、Excel导出等常用封装。

    菜鸟javascript基础资料整理3 正则

    ①test()方法 //test() 方法检索字符串中的指定值。返回值是 true 或 false。 var patt1=new RegExp(“e”); [removed](patt1.test(“The best things in life are free”)); ②exec()方法 //exec(&#41...

    Google Gson的使用方法,实现Json结构的相互转换源代码

    在Java开发中,有时需要保一个数据结构成字符串,可能你会考虑用Json,但是当Json字符串转换成Java对象时,转换成的是JsonObject,并不是你想要的Class类型的对象,操作起来就很不是愉悦,本代码就解决了这些问题。

    编译原理-词法分析

    程序用JAVA编写,已通过老师的测试。 实现的功能为根据正规式构建NFA,DFA和最小化DFA,并输出。接受相应的测试字符串进行测试。 压缩包中有JAVA源代码,概述文档和EXE可执行程序

    菜鸟javascript基础资料整理2

    1。... //把字符串中的所有字母都被转化为大写字母。 [removed] var str=”Hello world!” [removed](str.toUpperCase()) [removed] 3。 //js中个变量添加超链接 [removed] var txt=”Hello World!

    leetcode_Python:Python版本的Leetcode解决方案

    String 字符串 Math Tree 树 BackTracking 回溯 Dynamic Programming 动态规划 Linked List 链表 Binary Search Matrix 矩阵 BFS DFS 宽度优先 深度优先 Stack & PriorityQueue 堆栈 Graph Design

    algorithms:只是个菜鸟。这个项目是在空闲时间编写的。我会不定期更新。希望与您分享一些东西〜

    与大家分享我学习算法的一些经历。这个项目不定期更新。数组/链表:树相关:AVLTree 平衡二叉搜索树...BFSGraph 图BFS模板Dijkstra 寻求最短路SwimmingCrossSea 漂洋过海CloneGraph (leetcode 133)字符串相关:Reve

    HMAC-SHA1 签名demo

    附件为将制定的字符串进行Base64加密,然后对加密后的结果通过指定的key和value进行HMAC-SHA1签名,并将签名后的值赋值给sign,例如: encodeparam = Base64(approvestatus=1&channelid=dingding&doctorid=1&...

    mybatis-generator-数据库表映射实体,生成mapper.xml,适用于mybatis-puls

    适用于java,数据库表映射...添加了sql中对字符串的空判断,之前只有null判断;DAO层继承了BaseMapper,适用于mybatis-plus; mybatis-plus的开启可控制; 使用参考README.md文件内容,可以根据文档自己再做二次开发;

    gasstationleetcode-LeetCode:热门面试问题的解决方案

    字符串到整数 (atoi) (11)。 盛水最多的容器 (13). 罗马到整数 (14)。 最长公共前缀 (15)。 3总和 (17)。 电话号码的字母组合 (19). 从列表末尾删除第 N 个节点 (20). 有效括号 (21)。 合并两个排序列表 (22)。 合并...

    菜鸟学习python的第一天–变量、数据类型、常见运算符、数据的类型转换

    //变量定义 Java c c++ c# 强数据类型语言,在定义的时候,就确定下来要存储什么数据 int a=10; double b = 3.1415; boolean c = true; #python 弱数据类型语言 1.什么是变量? 符号来代表这个值 2.变量的定义 变量...

    在线订票系统源码(毕业设计_C#+SQL)_TicketWeb

    name="webSealTicketConnectionString"为连接字符串。connectionString="Data Source=.;Initial Catalog=webSealTicket; 为数据源。 Security=True"启用安全。 @更多@ http://cleopard.download.csdn.net/ 福利 ...

Global site tag (gtag.js) - Google Analytics