[ Java学习基础 ] String字符串的基本操作
字符串的拼接
String字符串虽然是不可变的字符串,但也同样可以进行拼接,只是会产生一个新的对象。String字符串拼接的时候可以使用“+”运算符或String的concat(String str)方法。其中“+”运算符的优势是可以连接任何类型的数据拼接成为字符串,而concat方法只能拼接String类型的字符串。
示例如下:
String s1 = "Hello";
// 使用+运算符连接
String s2 = s1 + " ";
String s3 = s2 + "World";
System.out.println(s3); String s4 = "Hello";
// 使用+运算符连接,支持+=赋值运算符
s4 += " ";
s4 += "World";
System.out.println(s4); String s5 = "Hello";
// 使用concat方法连接
s5 = s5.concat(" ").concat("World");
System.out.println(s5); int age = 18;
String s6= "I'm " + age + "years old.";
System.out.println(s6); char score = 'A';
String s7= "His grade is" + score;
System.out.println(s7); java.util.Date now = new java.util.Date();
//对象拼接自动调用toString()方法
String s8= "Date:" + now;
System.out.println(s8);
输出结果:
Hello World
Hello World
Hello World
I'm 18 years old.
His grade is A
Date:Thu May 25 16:25:40 CST 2017
上述代码第3、4行使用+运算符进行字符串的拼接,其中产生了三个对象。代码第9、10行是使用+=赋值运算符,本质上也是+运算符进行拼接。
代码第15行采用concat方法进行拼接,该方法的完整定义如下:
public String concat(String str)
它的参数和返回值都是String,因此代码第15行可以连续调用该方法进行多个字符串的拼接。
代码第19和第23行是使用+运算符,将字符串与其他类型数据进行的拼接。代码第28行是与对象可以进行拼接,Java中所有对象都有一个toString()方法,该方法可以将对象转换为字符串,拼接过程会调用该对象的toString()方法,将该对象转换为字符串后再进行拼接。代码第26行的java.util.Date类是Java SE提供的日期类。
字符串查找
从给定的字符串中查找字符或字符串是常见的操作。String类中提供了indexOf和lastIndexOf方法供使用,方法返回值是所查找的字符或字符串所在的位置,若未找到,则会返回-1。以下是其它常用的重载方法:
int indexOf(int ch):从前往后搜索字符ch,返回第一次找到字符ch所在处的索引。
int indexOf(int ch, int fromIndex):从指定的索引开始从前往后搜索字符ch,返回第一次找到字符ch所在处的索引。
int indexOf(String str):从前往后搜索字符串str,返回第一次找到字符串所在处的索引。
int indexOf(String str, int fromIndex):从指定的索引开始从前往后搜索字符串str,返回第一次找到字符串所在处的索引。
int lastIndexOf(int ch):从后往前搜索字符ch,返回第一次找到字符ch所在处的索引。
int lastIndexOf(int ch, int fromIndex):从指定的索引开始从后往前搜索字符ch,返回第一次找到字符ch所在处的索引。
int lastIndexOf(String str):从后往前搜索字符串str,返回第一次找到字符串所在处的索引。
int lastIndexOf(String str, int fromIndex):从指定的索引开始从后往前搜索字符串str,返回第一次找到字符串所在处的索引。
示例如下:
String sourceStr = "There is a string accessing example."; //获得字符串长度
int len = sourceStr.length();
//获得索引位置16的字符
char ch = sourceStr.charAt(16); //查找字符和子字符串
int firstChar1 = sourceStr.indexOf('r');
int lastChar1 = sourceStr.lastIndexOf('r');
int firstStr1 = sourceStr.indexOf("ing");
int lastStr1 = sourceStr.lastIndexOf("ing");
int firstChar2 = sourceStr.indexOf('e', 15);
int lastChar2 = sourceStr.lastIndexOf('e', 15);
int firstStr2 = sourceStr.indexOf("ing", 5);
int lastStr2 = sourceStr.lastIndexOf("ing", 5); System.out.println("原始字符串:" + sourceStr);
System.out.println("字符串长度:" + len);
System.out.println("索引16的字符:" + ch);
System.out.println("从前往后搜索r字符,第一次找到它所在索引:" + firstChar1);
System.out.println("从后往前搜索r字符,第一次找到它所在索引:" + lastChar1);
System.out.println("从前往后搜索ing字符串,第一次找到它所在索引:" + firstStr1);
System.out.println("从后往前搜索ing字符串,第一次找到它所在索引:" + lastStr1);
System.out.println("从索引为15位置开始,从前往后搜索e字符,第一次找到它所在索引:" + firstChar2);
System.out.println("从索引为15位置开始,从后往前搜索e字符,第一次找到它所在索引:" + lastChar2);
System.out.println("从索引为5位置开始,从前往后搜索ing字符串,第一次找到它所在索引:" + firstStr2);
System.out.println("从索引为5位置开始,从后往前搜索ing字符串,第一次找到它所在索引:" + lastStr2);
输出结果:
原始字符串:There is a string accessing example.
字符串长度:36
索引16的字符:g
从前往后搜索r字符,第一次找到它所在索引:3
从后往前搜索r字符,第一次找到它所在索引:13
从前往后搜索ing字符串,第一次找到它所在索引:14
从后往前搜索ing字符串,第一次找到它所在索引:24
从索引为15位置开始,从前往后搜索e字符,第一次找到它所在索引:21
从索引为15位置开始,从后往前搜索e字符,第一次找到它所在索引:4
从索引为5位置开始,从前往后搜索ing字符串,第一次找到它所在索引:14
从索引为5位置开始,从后往前搜索ing字符串,第一次找到它所在索引:-1
soucreStr字符串索引如下:

字符串比较
字符串也是常见的操作,包括比较相等、比较大小、比较前缀和后缀等。
比较相等
String提供的比较字符串相等的方法:
boolean equals(Object anObject):比较两个字符串中内容是否相等。
boolean equalsIgnoreCase(String anotherString):类似equals方法,只是忽略大小写。
比较大小
有时不仅需要知道是否相等,还要知道大小,String提供的比较大小的方法:
int compareTo(String anotherString):按字典顺序比较两个字符串。如果参数字符串等于此字符串,则返回值 0;如果此字符串小于字符串参数,则返回一个小于 0 的值;如果此字符串大于字符串参数,则返回一个大于 0 的值。
int compareToIgnoreCase(String str):类似compareTo,只是忽略大小写。
比较前缀和后缀
boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。
boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始
示例如下:
String s1 = new String("Hello");
String s2 = new String("Hello");
// 比较字符串是否是相同的引用
System.out.println("s1 == s2 : " + (s1 == s2));
// 比较字符串内容是否相等
System.out.println("s1.equals(s2) : " + (s1.equals(s2)));
String s3 = "HELlo";
// 忽略大小写比较字符串内容是否相等
System.out.println("s1.equalsIgnoreCase(s3) : " + (s1.equalsIgnoreCase(s3)));
// 比较大小
String s4 = "java";
String s5 = "Swift";
// 比较字符串大小 s4 > s5
System.out.println("s4.compareTo(s5) : " + (s4.compareTo(s5)));
// 忽略大小写比较字符串大小 s4 < s5
System.out.println("s4.compareToIgnoreCase(s5) : " + (s4.compareToIgnoreCase(s5)));
// 判断文件夹中文件名
String[] docFolder = { "java.docx", " JavaBean.docx", "Objecitve-C.xlsx", "Swift.docx " };
int wordDocCount = 0;
// 查找文件夹中Word文档个数
for (String doc : docFolder) {
// 去的前后空格
doc = doc.trim();
// 比较后缀是否有.docx字符串
if (doc.endsWith(".docx")) {
wordDocCount++;
}
}
System.out.println("文件夹中Word文档个数是: " + wordDocCount);
int javaDocCount = 0;
// 查找文件夹中Java相关文档个数
for (String doc : docFolder) {
// 去的前后空格
doc = doc.trim();
// 全部字符转成小写
doc = doc.toLowerCase();
// 比较前缀是否有java字符串
if (doc.startsWith("java")) {
javaDocCount++;
}
}
System.out.println("文件夹中Java相关文档个数是:" + javaDocCount);
输出结果:
s1 == s2 : false
s1.equals(s2) : true
s1.equalsIgnoreCase(s3) : true
s4.compareTo(s5) : 23
s4.compareToIgnoreCase(s5) : -9
文件夹中Word文档个数是: 3
文件夹中Java相关文档个数是:2
上述代码第16行的compareTo方法按字典顺序比较两个字符串,s4.compareTo(s5)表达式返回结果大于0,说明s4大于s5,字符在字典中顺序事实上就它的Unicode编码,先比较两个字符串的第一个字符j和S,j的Unicode编码是106,S的Unicode编码是83,所以可以得出结论s4 > s5。
代码第18行是忽略大小写时,要么全部当成小写字母进行比较,要么当前成全部大写字母进行比较,无论哪种比较结果都是一样的s4 < s5。
代码第26行trim()方法可以去除字符串前后空白。代码第40行toLowerCase()方法可以将此字符串全部转化为小写字符串,类似的方法还有toLowerCase()方法,可将字符串全部转化为小写字符串。
字符串截取
Java中主要的两个常用字符串截取方法如下:
String substring(int beginIndex):从指定索引beginIndex开始截取一直到字符串结束的子字符串。
String substring(int beginIndex, int endIndex):从指定索引beginIndex开始截取直到索引endIndex - 1处的字符,注意包括索引为beginIndex处的字符,但不包括索引为endIndex处的字符。
示例如下:
String sourceStr = "There is a string accessing example.";
// 截取example.子字符串
String subStr1 = sourceStr.substring(28);
// 截取string子字符串
String subStr2 = sourceStr.substring(11, 17);
System.out.printf("subStr1 = %s%n", subStr1);
System.out.printf("subStr2 = %s%n",subStr2); // 使用split方法分割字符串
System.out.println("-----使用split方法-----");
String[] array = sourceStr.split(" ");
for (String str : array) {
System.out.println(str);
}
输出结果:
subStr1 = example.
subStr2 = string
-----使用split方法-----
There
is
a
string
accessing
example.
上述sourceStr字符串索引如下图所示。代码第3行是截取example.子字符串,由索引图可见e字符索引是28, 从索引28字符截取直到sourceStr结尾。代码第5行是截取string子字符串,由图可见,s字符索引是11,g字符索引是16,endIndex参数应该17。
另外,String还提供了字符串分割方法,见代码第11行split(" ")方法,参数是分割字符串,返回值String[]。

[ Java学习基础 ] String字符串的基本操作的更多相关文章
- [ Java学习基础 ] String、StringBuffer、StringBuilder比较学习
首先讲获得字符串对象的方式有两种,一种是直接使用字符串常量,一种是使用new关键字创建,但它们之间是有一些区别,如下运行实例: String s1 = new String("Hello&q ...
- Java学习--基础
java学习 基础 Java三大版本 javase 标准版 占领桌面端(基础) javame 移动版 嵌入式开发.占领手机端 javaee 企业版 占领服务器端 Java的特性和优势 跨平台.可移植性 ...
- [ Java学习基础 ] Java构造函数
构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...
- [ Java学习基础 ] Java的继承与多态
看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...
- [ Java学习基础 ] Java的抽象类与接口
一.抽象类 1. 抽象类 Java语言提供了两种类:一种是具体类:另一种是抽象子类. 2. 抽象类概念: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的 ...
- 从零开始学习前端JAVASCRIPT — 3、JavaScript基础string字符串介绍
1:字符串 JS中的任何数据类型都可以当作对象来看.所以string既是基本数据类型,又是对象. 2:声明字符串 基本数据类型:var sStr = '字符串'; 对象的方法:var oStr = n ...
- JAVA学习基础知识总结(原创)
(未经博主允许,禁止转载!) 一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平 ...
- java 学习基础学习单词及java关键词
在JAVA学习中我们难免会犯一些逻辑错误,语法错误,和一些运行错误,对于英语不好的人,就的记下下面的2常用单词,有助于我们提高在使用软件编写代码的速度和代码调试,能更便捷的找出错误,知道1中的保溜关键 ...
- java学习基础部分
JVM虚拟机的位置: 垃圾回收在java程序运行过程中自动进行,程序员无法精准控制和干预. Java程序还会出现内存泄漏和内存溢出. Jre = jvm+java se标准类库 Jdk = jre + ...
随机推荐
- bug终结者 团队作业第六、七周
bug终结者 团队作业第六.七周 作业要求:团队作业第六.七周 博客编辑:20162322 朱娅霖 一.修改<需求规格说明书> <需求规格说明书>2.0版(即初稿) <需 ...
- NetFPGA-1G-CML Demo --- openflow_switch
环境 ubuntu 14.04 vivado 15.2 ise 14.6 更多基础配置:http://www.cnblogs.com/wpqwpq/p/6771568.html 运行步骤 step1: ...
- C# Unity游戏开发——Excel中的数据是如何到游戏中的 (四)2018.4.3更新
本帖是延续的:C# Unity游戏开发--Excel中的数据是如何到游戏中的 (三) 最近项目不算太忙,终于有时间更新博客了.关于数据处理这个主题前面的(一)(二)(三)基本上算是一个完整的静态数据处 ...
- 山西某公司NetApp存储不小心删除文件数据恢复成功案例
故障情况简介: 需要进行数据恢复的设备是一台NetApp存储,共有24块磁盘组成.由于管理员删除文件夹,且时间比较久,删除有几个月时间. 可恢复性判断:由于NetApp中的文件系统的特性,WAFL是& ...
- 从数据恢复角度解析RAID6结构原理
[什么是RAID] RAID的概念描述在互联网上比比皆是,用最简单的原理描述,就是在定义存储方式时允许在一部分数据缺失的情况下不影响全部数据,类似于通讯领域的纠错码.不同的冗余模式形成了不同的R ...
- C#网页提交html代码报错
1.在页面顶部 Page 标签加入属性 ValidateRequest="false" 2.如果开发环境是4.0及以上,在web.config加入 <system.web&g ...
- Python爬虫之urllib模块2
Python爬虫之urllib模块2 本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于Beautiful ...
- SQL Server 实现类似C#中 PadLeft功能
USE [Test] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --@column 表示字段或者常量,@paddingChar 表示 补位 ...
- MHA 安装与简单使用
MHA 在过去几年一直用的比较火,特别是在在传统复制的那个年代.至从有了GTID好像我们也可以把MHA给忘记了,但是很多企业现在还是在用的比较多.每个公司的MHA玩法也不太一样,但是本质都是差不多了. ...
- python 面向对象之多态与绑定方法
多态与多态性 一,多态 1,多态指的是一类事物有多种形态(python里面原生多态) 1.1动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.AB ...