字符串的长度是指其所包含的字符的个数。调用如下的length( )方法可以得到这个值:

int length( )

下面的程序段输出“3”,因为在字符串s中有三个字符。

char chars[] = { 'a', 'b', 'c' };
String s = new String(chars);
System.out.println(s.length());

特殊的字符串操作
因为字符串是程序中的一个通用和重要的部分,Java为字符串操作在语法中增加了特殊的支持。这些操作包括从字符串常量自动创建新的String实例。通过+运算符连接多个String对象以及将其他的数据类型转换成字符串形式。尽管有显式的方法去执行这些函数,而为了方便程序员,Java会自动执行它们。

字符串文字
前面的例子说明了如何通过使用new运算符从一个字符数组明确地创建一个String实例。然而这是一种早期的使用字符串常量的处理方法。对于程序中的每一个字符串常量,Java会自动创建String对象。因此,可以使用字符串常量初始化String对象。例如,如下的程序代码段创建两个相等的字符串。

char chars[] = { 'a', 'b', 'c' };
String s1 = new String(chars);
String s2 = "abc"; // use string literal

由于对应每一个字符串常量,有一String对象被创建,因此在使用字符串文字的任何地方,都可以使用String对象。例如,可以直接对引用字符串调用方法,如同它是一个对象引用,如下面语句所显示的那样。以字符串“abc”调用方法length( ),正如所料,输出“3”。

System.out.println("abc".length());

通常,Java不允许对String对象进行操作。这一规则的一个例外是+运算符,它可以连接两个字符串,产生一个String对象。也允许使用一连串的+运算符,例如下面的程序段将三个字符串连接起来:

String age = "9";
String s = "He is " + age + " years old.";
System.out.println(s);

输出为字符串“He is 9 years old.”。

字符串连接的一个实际使用是当创建一个很长的字符串时,可以将它拆开,使用+将它们连接起来,避免源代码中长字符串的换行,下面是一个例子:

// Using concatenation to prevent long lines.
class ConCat { public static void main(String args[]) { String longStr = "This could have been " + "a very long line that would have " + "wrapped around. But string concatenation " + "prevents this."; System.out.println(longStr); }
}

字符串与其他类型数据的连接
字符串可以和其他类型的数据连接。例如,考虑与前面的例子略有差别的一个例子:

int age = 9;
String s = "He is " + age + " years old.";
System.out.println(s);

在这里,age是一个整型(int)而不是另一个字符串(String)型值,但是程序的输出与前面的例子相同。这是因为在字符串(String)对象中age的整型(int)值自动转换为它的字符串(String)形式。

然后这个字符串就和前面一样被连接。只要+运算符的一个运算数是字符串(String)实例,编译器就将另一个运算数转换为它的字符串形式。

应当小心的是当你将其他类型的操作与字符串连接表达式混合时,有可能得到意想不到的结果。看下面例子:

String s = "four: " + 2 + 2;
System.out.println(s);

程序显示:

four: 22

而不是

four: 4

虽然这可能是你期望得到的。这是为什么呢?这是因为运算符的优先级造成了首先是“four”和与2相应的字符串的连接,这个连接的结果再和与2相应的字符串连接。若要先实现整数加,就应该使用圆括号。像下面这样:

String s = "four: " + (2 + 2);

现在s包含了字符串“four:4”。

字符串转换和toString( )
当Java在连接时将数据转换为其字符串形式时,它是通过调用一个由字符串(String)定义的字符串转换方法valueOf( )的重载来完成的。valueOf( )方法对所有简单的类型和类型Object重载。

对于简单类型,valueOf( )方法返回一个字符串,该字符串包含了相应其被调用的值的可读值。

对于对象,valueOf( )方法调用toString( )方法。

这里让我们讨论toString( )方法,因为通过它可以确定所创建类的对象的字符串形式。每一个类都执行toString( )方法,因为它是由Object定义的。然而toString( )方法的默认实现是不够的。对于所创建的大多数类,通常想用你自己提供的字符串表达式重载toString( )
方法。幸运的是这很容易做到。toString( )方法具有如下的一般形式:

String toString( )

实现toString( )方法,仅仅返回一个String对象,该对象包含描述类中对象的可读的字符串。

通过对所创建类的toString( )方法的覆盖,允许将得到的字符串完全集成到Java的程序设计环境中。例如它们可以被用于print( )和println( )语句以及连接表达式中。下面的程序中用Box类重载toString( )方法说明了这些。

// Override toString() for Box class.
class Box { double width; double height; double depth; Box(double w, double h, double d) { width = w; height = h; depth = d; } public String toString() { return "Dimensions are " + width + " by " + depth + " by " + height + "."; }
}
class toStringDemo { public static void main(String args[]) { Box b = new Box(10, 12, 14); String s = "Box b: " + b; // concatenate Box object System.out.println(b); // convert Box to string System.out.println(s); }
}

该程序的输出如下所示:

Dimensions are 10.0 by 14.0 by 12.0
Box b: Dimensions are 10.0 by 14.0 by 12.0

正如你能看到的那样,当Box对象在连接表达式中使用或出现在调用println( )中时,Box的toString( )方法被自动调用。

开课吧Java课堂:特殊的字符串如何操作,字符串如何连接相关推荐

  1. 开课吧Java课堂:字符串如何处理?

    像大多数其他计算机语言一样,Java中的字符串也是一连串的字符.但是与许多其他的计算机语言将字符串作为字符数组处理不同,Java将字符串作为String类型对象来处理. 将字符串作为内置的对象处理允许 ...

  2. 开课吧Java课堂:StringBuffer全解,非常详细

    StringBuffer是提供了大量的字符串功能的字符串(String)类的对等类.正如你所知,字符串(String)表示了定长,不可变的字符序列.相反,StringBuffer表示了可变长的和可写的 ...

  3. 开课吧Java课堂:如何利用valueOf( )方法实现数据转换

    valueOf( )方法将数据的内部格式转换为可读的形式.它是一种静态方法,对于所有Java内置的类型,在字符串(String)内被重载,以便每一种类型都能被转换成字符串. valueOf( )方法还 ...

  4. oracle 全局搜索字符串,oracle操作字符串:拼接、替换、截取、查找 _ 学编程-免费技术教程分享平台...

    1.拼接字符串 1)可以使用"||"来拼接字符串 1 select '拼接'||'字符串' as str from dual 2)通过concat()函数实现 1 select c ...

  5. 开课吧Java课堂之什么是搜索字符串

    String类提供了两个方法,允许在字符串中搜索指定的字符或子字符串: · indexOf( ) 搜索字符或子字符串首次出现. · lastIndexOf( ) 搜索字符或子字符串的最后一次出现. 这 ...

  6. 开课吧Java课堂:如何使用比较函数?

    下面是一个说明定制的比较函数能力的例子.该例子实现compare( )方法以便它按正常顺序的逆向进行操作.因此,它使得一个树集合按逆向的顺序进行存储. // Use a custom comparat ...

  7. 开课吧Java课堂:什么是ArrayList类

    ArrayList类扩展AbstractList并执行List接口.ArrayList支持可随需要而增长的动态数组.在Java中,标准数组是定长的.在数组创建之后,它们不能被加长或缩短,这也就意味着你 ...

  8. 开课吧Java课堂:小应用程序基础是什么

    小应用程序是访问internet服务器,在internet上传播的,自动安装的,作为部分Web文档运行的小应用程序.当小应用程序到达客户端,它被限制访问资源,以使它能够在不受病毒威胁和破坏数据完整性的 ...

  9. 开课吧Java课堂:什么是流?如何运用字节流和字符流?

    Java程序通过流来完成输入/输出.流是生产或消费信息的抽象.流通过Java的输入/输出系统与物理设备链接.尽管与它们链接的物理设备不尽相同,所有流的行为具有同样的方式.这样,相同的输入/输出类和方法 ...

最新文章

  1. k8s修改kube-apiserver的service-node-port-range端口范围
  2. shader 隐身_如何超越隐身障碍
  3. pytest测试框架(五)---使用xfail将用例标记为失败
  4. SAP License:SAP财务管理的认识
  5. MySQL更改安装路径和Data位置
  6. 洛谷P1821 [USACO07FEB]银牛派对Silver Cow Party
  7. 《精通LabVIEW虚拟仪器程序设计与案例实现》一2.1 LabVIEW安装
  8. Extjs study
  9. 【TSP】基于matlab蚁群算法求解旅行商问题【含Matlab源码 398期】
  10. 最全的世界地图矢量素材下载(AI、EPS、SVG格式)
  11. R语言无法安装fUnitRoots包
  12. 用x32/x64dbg脱DLL壳(IAT表修复和重定位表修复)
  13. 金山词霸2009牛津SP3破解版 PDF不能取词的解决办法
  14. php slim 教程,php框架slim架构上存在XXE漏洞(XXE的典型存在形式)
  15. linux 开发c工具箱,利用Windows10的Linux子系统搭建gcc/g++开发环境
  16. OPENGL回归原点
  17. vue之table案例
  18. 有趣又实用的4款微信小程序,有了它们,APP都要靠边站!
  19. 六轴机器人光机_六款小型六轴机器人性能数据大比拼
  20. FindProxyForURL设置浏览器代理

热门文章

  1. [转载] application/json 四种常见的 POST 提交数据方式
  2. [转载] Python学习笔记 String类型常用方法
  3. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_08 Map集合_3_Map接口中的常用方法...
  4. 简单的Vue计算属性
  5. [转载]程序员的激情其实是一种痛苦
  6. 如何让你的JavaScript代码更加语义化
  7. ERROR: “System.Web.Mvc.Controller.File(string, string, string)”是一个“方法”
  8. HTML知识积累及实践(二) - 标签样式
  9. C++ Primer Plus学习(四)—— string类实践
  10. 相机标定(三)—— 正交投影和透视投影变换