Java 字符串简介
从概念上讲,Java 字符串就是 Unicode 字符序列。Java 没有内置的字符串类型,而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String。每个用双引号括起来的字符串都是 String 类的一个实例:
String e = ""; // 空字符串
String greeting = "Hello";
1. 子串
String 类的 substring 方法可以从一个较大的字符串提取出一个子串。
String greeting = "Hello";
String s = greeting.substring(0, 3); // 变量 s 为 "Hel"
字符串中的代码单元和代码点从 0 开始计算。substring 方法的第二个参数是不想复制的第一个位置。
substring 的工作方式有一个优点: 容易计算子串长度。字符串s.substring(a, b)的长度为b - a。
2. 拼接
Java 语言允许使用 + 号连接(拼接)两个字符串。
String expletive = "Expletive";
String PG13 = "deleted";
String message = expletive + PG13;
System.out.println(message); // 打印 Expletivedeleted
当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串。
如果需要把多个字符串放在一起,用一个界定符分隔,可以使用静态 join 方法:
String all = String.join(" /", "S", "M", "L", "XL");
System.out.println(all);// 打印 S /M /L /XL
String [] arr = {"S", "M", "L", "XL"};
all = String.join(" /", arr);
System.out.println(all);// 打印 S /M /L /XL
arr = new String[]{"S", "M", "L", "XL"};
List<String> list = Arrays.asList(arr);
all = String.join(" /", arr);
System.out.println(all);// 打印 S /M /L /XL
3. 字符串不可变
String 类没有提供用于修改字符串的方法。由于不能修改 Java 字符串,所以在 Java 文档中将 String 类对象称为是不可变的(immutable)。不可变字符串却有一个优点:编译器可以让字符串共享。
Java 的设计者认为共享带来的高效率远远胜过于提取子串、拼接字符串所带来的低效率。查看一下程序会发现:很少需要修改字符串,而是往往需要对字符串进行比较(有一种例外情况,将来自于文件或键盘的单个字符或较短的字符串汇集成字符串),Java 专门为此提供了一个单独的类。
4. 检测字符串是否相等
可以使用 equals 方法检测两个字符串是否相等。表达式:
s.equals(t);
如果字符串 s 与字符串 t 相等,返回 true;否则,返回 false。s 与 t 可以是字符串变量,也可以是字符串字面量。
想要检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法。
"Hello".equalsIgnoreCase("hello"); // true
一定不要使用 == 运算符检测两个字符串是否相等!这个运算符只能够确定两个字符串是否放置在同一个位置上。当然,如果字符串放置在同一个位置上,她们必然相等。但是,完全有可能将内容相同的多个字符串的拷贝放置在不同的位置上。
如果虚拟机始终将相同的字符串共享,就可以使用 == 运算符检测是否相等。但实际上只有字符串常量是共享的。而 + 或 substring 等操作产生的结果并不是共享的。因此,千万不要使用 == 运算符测试字符串的相等性,以免在程序中出现糟糕的 bug。这种 bug 很像随机产生的间歇性错误。
5. 空串与 Null 串
空串是一个 Java 对象,有自己的长度(0)和内容(空)。空串 “” 是长度为 0 的字符串。
代码检查一个字符串是否为空:
if (str.length() == 0)
// 或
if (str.equals(""))
要检查一个字符串是否为 null:
if (str == null)
检查一个字符串既不是 null 也不为空串:
if (str != null && str.length() != 0)
6. 码点与代码单元
Java 字符串由 char 值序列组成。char 数据类型是一个采用 UTF-16 编码表示 Unicode 码点的代码单元。最常用 Unicode 字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元表示。
length 方法将返回采用 UTF-16 编码表示的给定字符所需要的代码单元数量。
String greeting = "Hello";
int n = greeting.length(); // 变量 n 为 5
要想得到实际的长度,即码点数量,可调用:
String greeting = "Hello";
int n = greeting.codePointCount(0, greeting.length()); // 变量 n 为 5
调用 s.charAt(n) 将返回位置 n 的代码单元,n 介于0 ~ s.length()-1之间。
String greeting = "Hello";
char first = greeting.charAt(0); // first 为 'H'
char last = greeting.charAt(4); // last 为 'o'
要想得到第 i 个代码点,应该使用下列语句
String greeting = "Hello";
int i = 3;
int index = greeting.offsetByCodePoints(0, i);
int cp = greeting.codePointAt(index);
// 或者
int cp = greeting.codePointAt(index);
Java 对字符串中的代码单元和码点从 0 开始。
为什么对代码单元如此大惊小怪?考虑下列语句:
Java 字符串简介的更多相关文章
- Java开发知识之Java字符串类
Java开发知识之Java字符串类 一丶简介 任何语言中.字符串都是很重要的.都涉及到字符串的处理. 例如C++中. 字符串使用内存. 并提供相应的函数进行处理 strcmp strcat strcp ...
- java NIO简介
1)java nio简介 nio 是 java New IO 的简称,在 jdk1.4 里提供的新 api . Sun 官方标榜的特性如有:为所有的原始类型提供 (Buffer) 缓存支持:字符集编码 ...
- Spring Boot 2.0 学习笔记(一)——JAVA EE简介
本章内容:JAVA EE>Spring>Spring Boot 一.JAVA EE简介 1.1 Java ee优点:结束了Web开发的技术无序状态,让程序员.架构师用同一种思维去思考如何架 ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Java SE 简介 & 环境变量的配置
Java SE 简介 & 环境变量的配置 一.Java 技术的三个方向 Java 技术分为三个方向 javaSE( Java Platform Standard Edition 标准版)用来开 ...
- (转)Java字符串
转自:http://blog.sina.com.cn/s/blog_899678b90101brz0.html 创建字符串有两种方式:两种内存区域(字符串池,堆)1," " 引号创 ...
- Java异常(一) Java异常简介及其架构
概要 本章对Java中的异常进行介绍.内容包括:Java异常简介Java异常框架 转载请注明出处:http://www.cnblogs.com/skywang12345/p/3544168.html ...
- Java字符串split函数的注意事项
Java字符串的split方法可以分割字符串,但和其他语言不太一样,split方法的参数不是单个字符,而是正则表达式,如果输入了竖线(|)这样的字符作为分割字符串,会出现意想不到的结果, 如, Str ...
- 关于java字符串编译优化问题
情景一:不好的字符串拼接习惯 起因是这样的:一个大牛在写了一篇关于java字符串优化问题的讲解,他提到:不要使用strObj+otherValue的方法将otherValue转换为字符串形式,因 ...
随机推荐
- java 数字和日期处理
static int abs(int a) 返回 a 的绝对值 static long abs(long a) 返回 a 的绝对值 static float abs(float a) 返回 a 的绝对 ...
- 如何实现Application event,观察者模式
spring 事件为bean 与 bean之间传递消息.一个bean处理完了希望其余一个接着处理.这时我们就需要其余的一个bean监听当前bean所发送的事件. spring事件使用步骤如下: 1.先 ...
- CentOS 7 最小化安装及优化
CentOS 7 最小化安装及优化 目录 CentOS 7 最小化安装及优化 一.下载镜像文件 官方网站 国内镜像源 一.VMware 配置虚拟网络 二.VMware 新建虚拟机 三.CentOS 7 ...
- 30天自制操作系统-day3
30天自制操作系统-day3 前2天我们分别使用了直接使用二进制编辑器和简单的汇编指令生成了img文件,今天我们尝试一下使用稍微复杂一点的汇编指令 os.asm文件内容如下: ; hello-os ; ...
- Node.js gulp安装与使用出现问题与解决
此前使用了最新的4.0之后的gulp版本,出现了一系列的问题. 于是想换回3.9版本 (一)本地与全局都需要安装gulp ①首先卸载原来版本 npm uninstall gulp ②本地与全局分别安装 ...
- oracle 客户端与服务器端字符集原理(转自totozlj)
1.环境假设: 名词解释:应用程序页面即用户在浏览器中看到的页面,一般程序员在写页面的时候都会在页面中设置编码,这个编码也即是数据在浏览器到web服务器间传输的编码,如果不设置则默认iso-8859的 ...
- 建立索引和创建视图(结合YGGL.sql)
一.请按要求对YGGL库建立相关索引 (1)使用create index 语句创建索引 1.对employees表中的员工部门号创建普通索引depart_ind. mysql> create i ...
- 一图看懂Actor Typed
引言 朋友看罢我之前整理的<Akka Typed 官方文档之随手记>,一人用了诗歌<长城长>作为回赠,另一人则要求推出简化版本.于是抽空整理了几张思维导图,并且用了一些不太恰当 ...
- ContactCollections Design Report
通讯录的设计采用了分层+接口+面向对象+文件操作+方法实现 分三层实现,共使用了四个包,实现业务数据访问和界面的分离 contactaccess包实现对文件的访问 包括数据访问 ...
- JPEG解码--(1)JPEG文件格式概览
由于懒和人的忘性,以前做的一些笔记再回过头看时又有些生疏了,我决定把一些内容整理出来,以供有需要的来参考. 了解的人知道其价值所在,不知道的人就弃之如废物吧. 本篇是JPEG解码系列的第一篇--JPE ...