SlideShare a Scribd company logo
1 of 15
String
Agenda
概述
• 字符串可以说是任何编程语言中最长见到的数
  据类型了, 在前面的很多章节中也涉及到了一
  些字符串的操作;
• Java的字符串由java.lang.String类来实现, 该类
  提供了很多实用的方法对字符串进行操作;
• 关于字符串最重要的一点是java字符串对象的
  内容是不可变的, 在进行字符串操作的过程中
  总是有新的字符串对象被创建, 而不是原有的
  对象被修改.
不可变的字符串
               immutable string
• 对字符串对象的任何操作: 合并, 大小写转
  换, 截取等都不会改变原有的对象, 每次都会
  创建一个新的字符串对象并且返回; 示例:
  String s1 = “good”, s2 = “bye”;
  String s = s1 + s2; // 返回goodbye, s1/s2不变;
  s1.upperCase(); // 返回GOOD, s1不变;
  s1.substring(0, 2); // 返回go, s1不变;
• 示例: demo/Demo1.java
字符串操作
• 构造器
  String()    创建一个空字符串
  String(StringBuilder) 拷贝StringBuilder的内容
  String(StringBuffer)  拷贝StringBuffer的内容
• length()         长度
• chatAt(int)返回指定位置的字符, 从0开始
• getChars(), getBytes()
  返回字符/字节数组
• equals/equalsIgnoreCase
 字符串的内容是否相等, 后者不区分大小写
• compareTo
比较字符串大小, 返回负数/0/整数
• contains
是否包含某个子字符串
字符串操作
• startsWith/endsWith
是否以某个字符串开头或者结尾
• indexOf/lastIndexOf
返回某个子字符串的起始位置或者最后出现的位置
• substring
返回指定位置的一个子字符串
• concat
字符串合并, 通常使用加号
• replace
替换字符串的某些部分
• toLowerCase/toUpperCase
转换字符串大小写
• trim
去掉字符串开始和结尾的空格字符
• valueOf
static方法, 将其他的对象转换为字符串, 比如String s = String.valueOf(new
Integer(4))
格式化输出
• JDK5引入了System.out.format或者printf用于格
  式化输出, 示例:
  int i = 5;
  double d = 5.3;
  System.out.format(“Row 1: *%d %f+n”, x, y); // 或者
  System.out.printf(“Row 1: *%d %f+n”, x, y);
• 示例: demo/Demo2.java
• java.util.Formatter用于格式化字符串, 输出到标
  准输出或者附加到某个对象, 比如:
  Formatter fmt = new Formatter(System.out);
  fmt.format(“Now is %d o’clock”, 5); // 输出到标准输出
  StringBuffer buf = new StringBuffer();
  Formatter fmt = new Formatter(buf);
  fmt.format(“Now is %d o’clock”, 5); // 添加到StringBuffer
  System.out.println(buf.toString());
• 示例: demo/Demo3.java
格式化输出
                 常用的占位符
• 以上一节的” Now is %d o’clock” 为例, 这里的
  %d就是一个占位符, 表示相应位置的参数格
  式化为一个整数; 常用的占位符有:
  d   Integral (as decimal)
  x   Hex
  c   Unicode character
  b   Boolean value
  s   String
• 示例: demo/Demo4.java
格式化输出
               String.format
• JDK5同样为String类引入了静态方法实现字
  符串的格式化, 其功能与前述的两种方式相
  同, 示例:
  String s= fmt.format(“Now is %d o’clock”, 5);
• 示例: demo/Demo5.java
CharSequence
• 字符串本身就是一串字符的集合, java中所
  有的字符串类型包含String, StringBuffer和
  StringBuilder都实现了这个接口, 接口的规范
  如下:
 interface CharSequence {
     charAt(int i);
     length();
     subSequence(int start,| int end);
     toString();
 }
读取标准输入
                          Scanner
• 应用程序往往需要扫描相关的输入来并进行相应的
  处理, JDK5提供了工具类java.util.Scanner用于实现该
  功能; 通过以下构造器创建Scanner对象:
  Scanner(File)             指定某个文件作为输入
  Scanner(InputStream)      指定某个输入流作为输入
  Scanner(String)           使用字符串最为扫描的对象
Scanner提供了如下工具方法:
  nextLine()             读取下一行;
  nextInt()              读取下一个token(默认使用空格分隔), 并
                         返回一个整数; 如果该token不能被解析
                         为一个整数或者超出范围则抛出异常.
  hasNext()              是否还有下一个token
  next()                 返回下一个token, String类型
• 示例: demo/Demo6.java
Scanner vs. StringTokenizer
• 在JDK5之前可以使用StringTokenizer实现类
  似Scanner的功能, 但是易用性不如后者; 示
  例:
  String input = "But I’m not dead yet! I feel happy!";
  StringTokenizer stoke = new StringTokenizer(input);
  while(stoke.hasMoreElements())
     System.out.print(stoke.nextToken() + " ");

• 示例: demo/Demo7.java
StringBuffer
• 与String相同, StringBuffer也表示一个字符串对
  象, 示例:
  StringBuffer buf = new StringBuffer(“Hello”);
  System.out.println(buf.toString()); // Hello
• 不同之处在于StringBuffer的内容是可以更改的,
  它提供了如下接口用于修改字符串的内容:
  append        追加字符串
  delete        删除指定位置的字符串
  insert        在指定的位置插入字符串
  replace       替换指定位置的字符串
• 示例: demo/Demo8.java
StringBuffer
      vs. String vs.StringBuilder
• 当需要频繁的进行字符串修改时, 使用string
  是不太合适的, 因为这样会导致大量的对象
  被创建和回收, 造成一定的性能因素; 在这
  种情况下可以使用StringBuffer;
• StringBuilder与StringBuffer的类似, 也表示可
  以修改的字符串; 两者的区别在于前者是线
  程安全的(thread-safe), 而后者是线程不安全
  的; 这意味这前者在具体的使用中性能会稍
  弱于后者.
END

More Related Content

What's hot

Scala function-and-closures
Scala function-and-closuresScala function-and-closures
Scala function-and-closureswang hongjiang
 
從模組到類別
從模組到類別從模組到類別
從模組到類別Justin Lin
 
TypeScript 綜合格鬥技
TypeScript 綜合格鬥技TypeScript 綜合格鬥技
TypeScript 綜合格鬥技Will Huang
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Justin Lin
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试lydiafly
 
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Justin Lin
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Justin Lin
 
Java 8 與 retrolambda
Java 8 與 retrolambdaJava 8 與 retrolambda
Java 8 與 retrolambdaJustin Lin
 
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMCompiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMLi Hsuan Hung
 
02.python基础
02.python基础02.python基础
02.python基础modou li
 
Clojure
ClojureClojure
ClojureDi Xu
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7Justin Lin
 
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJustin Lin
 
資料永續與交換
資料永續與交換資料永續與交換
資料永續與交換Justin Lin
 
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programmingted-xu
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享zenyuhao
 
流程語法與函式
流程語法與函式流程語法與函式
流程語法與函式Justin Lin
 
[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3ArBing Xie
 
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJustin Lin
 

What's hot (20)

functional-scala
functional-scalafunctional-scala
functional-scala
 
Scala function-and-closures
Scala function-and-closuresScala function-and-closures
Scala function-and-closures
 
從模組到類別
從模組到類別從模組到類別
從模組到類別
 
TypeScript 綜合格鬥技
TypeScript 綜合格鬥技TypeScript 綜合格鬥技
TypeScript 綜合格鬥技
 
Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝Java SE 8 技術手冊第 5 章 - 物件封裝
Java SE 8 技術手冊第 5 章 - 物件封裝
 
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
 
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
Java SE 8 技術手冊第 14 章 - NIO 與 NIO2
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
 
Java 8 與 retrolambda
Java 8 與 retrolambdaJava 8 與 retrolambda
Java 8 與 retrolambda
 
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VMCompiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
Compiler for Dummy 一點都不深入的了解 Compiler, Interpreter 和 VM
 
02.python基础
02.python基础02.python基础
02.python基础
 
Clojure
ClojureClojure
Clojure
 
千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7千呼萬喚始出來的 Java SE 7
千呼萬喚始出來的 Java SE 7
 
Java SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - LambdaJava SE 8 技術手冊第 12 章 - Lambda
Java SE 8 技術手冊第 12 章 - Lambda
 
資料永續與交換
資料永續與交換資料永續與交換
資料永續與交換
 
2, object oriented programming
2, object oriented programming2, object oriented programming
2, object oriented programming
 
IOS入门分享
IOS入门分享IOS入门分享
IOS入门分享
 
流程語法與函式
流程語法與函式流程語法與函式
流程語法與函式
 
[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3[圣思园][Java SE]Io 3
[圣思园][Java SE]Io 3
 
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行APIJava SE 8 技術手冊第 11 章 - 執行緒與並行API
Java SE 8 技術手冊第 11 章 - 執行緒與並行API
 

Viewers also liked

Livro de medicina ambulatorial capt7
Livro de medicina ambulatorial capt7Livro de medicina ambulatorial capt7
Livro de medicina ambulatorial capt7radica93
 
H. Araneda // III Barómetro Mujer y Trabajo 2011
H. Araneda // III Barómetro Mujer y Trabajo 2011H. Araneda // III Barómetro Mujer y Trabajo 2011
H. Araneda // III Barómetro Mujer y Trabajo 2011ComunidadMujer Cm
 
Rubyのコーディング規約 @ Niigata.rb #3
Rubyのコーディング規約 @ Niigata.rb #3Rubyのコーディング規約 @ Niigata.rb #3
Rubyのコーディング規約 @ Niigata.rb #3Mihyaeru Takano
 
Curso rea eutm encuentro 1: Conocimiento abierto y materiales educativos
Curso rea eutm encuentro 1: Conocimiento abierto y materiales educativosCurso rea eutm encuentro 1: Conocimiento abierto y materiales educativos
Curso rea eutm encuentro 1: Conocimiento abierto y materiales educativosNatalia Hetery
 

Viewers also liked (9)

Livro de medicina ambulatorial capt7
Livro de medicina ambulatorial capt7Livro de medicina ambulatorial capt7
Livro de medicina ambulatorial capt7
 
Propuestas de salud candidatos 2012
Propuestas de salud candidatos 2012Propuestas de salud candidatos 2012
Propuestas de salud candidatos 2012
 
Familia escola
Familia escolaFamilia escola
Familia escola
 
Diplomado CM-UAI
Diplomado CM-UAIDiplomado CM-UAI
Diplomado CM-UAI
 
H. Araneda // III Barómetro Mujer y Trabajo 2011
H. Araneda // III Barómetro Mujer y Trabajo 2011H. Araneda // III Barómetro Mujer y Trabajo 2011
H. Araneda // III Barómetro Mujer y Trabajo 2011
 
Rubyのコーディング規約 @ Niigata.rb #3
Rubyのコーディング規約 @ Niigata.rb #3Rubyのコーディング規約 @ Niigata.rb #3
Rubyのコーディング規約 @ Niigata.rb #3
 
Curso rea eutm encuentro 1: Conocimiento abierto y materiales educativos
Curso rea eutm encuentro 1: Conocimiento abierto y materiales educativosCurso rea eutm encuentro 1: Conocimiento abierto y materiales educativos
Curso rea eutm encuentro 1: Conocimiento abierto y materiales educativos
 
Guerradecomandoecontrole fean-2011
Guerradecomandoecontrole fean-2011Guerradecomandoecontrole fean-2011
Guerradecomandoecontrole fean-2011
 
Actividad 2
Actividad 2Actividad 2
Actividad 2
 

Similar to 12, string

Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]yiditushe
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdfczzz1
 
3. java basics
3. java basics3. java basics
3. java basicsnetdbncku
 
13, io
13, io13, io
13, ioted-xu
 
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Justin Lin
 
Java8 lambda
Java8 lambdaJava8 lambda
Java8 lambdakoji lin
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
Ecmascript
EcmascriptEcmascript
Ecmascriptjay li
 
快速了解PostgreSQL
快速了解PostgreSQL快速了解PostgreSQL
快速了解PostgreSQL正中 周
 
11, exceptions
11, exceptions11, exceptions
11, exceptionsted-xu
 
02 Objective-C
02 Objective-C02 Objective-C
02 Objective-CTom Fan
 
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)永立 連
 
C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4Tao He
 

Similar to 12, string (20)

Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]Java Jdk6学习笔记[Ppt]
Java Jdk6学习笔记[Ppt]
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
模块一-Go语言特性.pdf
模块一-Go语言特性.pdf模块一-Go语言特性.pdf
模块一-Go语言特性.pdf
 
3. java basics
3. java basics3. java basics
3. java basics
 
13, io
13, io13, io
13, io
 
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
Java SE 7 技術手冊投影片第 10 章 - 輸入輸出
 
Sun java
Sun javaSun java
Sun java
 
Java8 lambda
Java8 lambdaJava8 lambda
Java8 lambda
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
Ecmascript
EcmascriptEcmascript
Ecmascript
 
快速了解PostgreSQL
快速了解PostgreSQL快速了解PostgreSQL
快速了解PostgreSQL
 
11, exceptions
11, exceptions11, exceptions
11, exceptions
 
Java 網路程式
Java 網路程式Java 網路程式
Java 網路程式
 
02 Objective-C
02 Objective-C02 Objective-C
02 Objective-C
 
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
getPDF.aspx
getPDF.aspxgetPDF.aspx
getPDF.aspx
 
SCJP ch17
SCJP ch17SCJP ch17
SCJP ch17
 
C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4C语言benchmark覆盖信息收集总结4
C语言benchmark覆盖信息收集总结4
 
jasmine入门指南
jasmine入门指南jasmine入门指南
jasmine入门指南
 

More from ted-xu

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert systemted-xu
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashbackted-xu
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rmanted-xu
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rmanted-xu
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recoveryted-xu
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle securityted-xu
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storageted-xu
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networkingted-xu
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance managementted-xu
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuningted-xu
 
7, business event system
7, business event system7, business event system
7, business event systemted-xu
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneousted-xu
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activityted-xu
 
4, workflow tables & api
4, workflow tables & api4, workflow tables & api
4, workflow tables & apited-xu
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebsted-xu
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflowted-xu
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow introted-xu
 
8, bes tables & api
8, bes tables & api8, bes tables & api
8, bes tables & apited-xu
 

More from ted-xu (20)

11, OCP - awr & alert system
11, OCP - awr & alert system11, OCP - awr & alert system
11, OCP - awr & alert system
 
10, OCP - flashback
10, OCP - flashback10, OCP - flashback
10, OCP - flashback
 
9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman9, OCP - restore and recovery with rman
9, OCP - restore and recovery with rman
 
8, OCP - backup with rman
8, OCP - backup with rman8, OCP - backup with rman
8, OCP - backup with rman
 
7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery7, OCP - configure database for backup and recovery
7, OCP - configure database for backup and recovery
 
6, OCP - oracle security
6, OCP - oracle security6, OCP - oracle security
6, OCP - oracle security
 
5, OCP - oracle storage
5, OCP - oracle storage5, OCP - oracle storage
5, OCP - oracle storage
 
4, OCP - oracle networking
4, OCP - oracle networking4, OCP - oracle networking
4, OCP - oracle networking
 
3, OCP - instance management
3, OCP - instance management3, OCP - instance management
3, OCP - instance management
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
12, OCP - performance tuning
12, OCP - performance tuning12, OCP - performance tuning
12, OCP - performance tuning
 
7, business event system
7, business event system7, business event system
7, business event system
 
6, workflow miscellaneous
6, workflow miscellaneous6, workflow miscellaneous
6, workflow miscellaneous
 
5, workflow function activity
5, workflow function activity5, workflow function activity
5, workflow function activity
 
4, workflow tables & api
4, workflow tables & api4, workflow tables & api
4, workflow tables & api
 
3, workflow in ebs
3, workflow in ebs3, workflow in ebs
3, workflow in ebs
 
2, a simple workflow
2, a simple workflow2, a simple workflow
2, a simple workflow
 
1, workflow intro
1, workflow intro1, workflow intro
1, workflow intro
 
8, bes tables & api
8, bes tables & api8, bes tables & api
8, bes tables & api
 

12, string

  • 3. 概述 • 字符串可以说是任何编程语言中最长见到的数 据类型了, 在前面的很多章节中也涉及到了一 些字符串的操作; • Java的字符串由java.lang.String类来实现, 该类 提供了很多实用的方法对字符串进行操作; • 关于字符串最重要的一点是java字符串对象的 内容是不可变的, 在进行字符串操作的过程中 总是有新的字符串对象被创建, 而不是原有的 对象被修改.
  • 4. 不可变的字符串 immutable string • 对字符串对象的任何操作: 合并, 大小写转 换, 截取等都不会改变原有的对象, 每次都会 创建一个新的字符串对象并且返回; 示例: String s1 = “good”, s2 = “bye”; String s = s1 + s2; // 返回goodbye, s1/s2不变; s1.upperCase(); // 返回GOOD, s1不变; s1.substring(0, 2); // 返回go, s1不变; • 示例: demo/Demo1.java
  • 5. 字符串操作 • 构造器 String() 创建一个空字符串 String(StringBuilder) 拷贝StringBuilder的内容 String(StringBuffer) 拷贝StringBuffer的内容 • length() 长度 • chatAt(int)返回指定位置的字符, 从0开始 • getChars(), getBytes() 返回字符/字节数组 • equals/equalsIgnoreCase 字符串的内容是否相等, 后者不区分大小写 • compareTo 比较字符串大小, 返回负数/0/整数 • contains 是否包含某个子字符串
  • 6. 字符串操作 • startsWith/endsWith 是否以某个字符串开头或者结尾 • indexOf/lastIndexOf 返回某个子字符串的起始位置或者最后出现的位置 • substring 返回指定位置的一个子字符串 • concat 字符串合并, 通常使用加号 • replace 替换字符串的某些部分 • toLowerCase/toUpperCase 转换字符串大小写 • trim 去掉字符串开始和结尾的空格字符 • valueOf static方法, 将其他的对象转换为字符串, 比如String s = String.valueOf(new Integer(4))
  • 7. 格式化输出 • JDK5引入了System.out.format或者printf用于格 式化输出, 示例: int i = 5; double d = 5.3; System.out.format(“Row 1: *%d %f+n”, x, y); // 或者 System.out.printf(“Row 1: *%d %f+n”, x, y); • 示例: demo/Demo2.java • java.util.Formatter用于格式化字符串, 输出到标 准输出或者附加到某个对象, 比如: Formatter fmt = new Formatter(System.out); fmt.format(“Now is %d o’clock”, 5); // 输出到标准输出 StringBuffer buf = new StringBuffer(); Formatter fmt = new Formatter(buf); fmt.format(“Now is %d o’clock”, 5); // 添加到StringBuffer System.out.println(buf.toString()); • 示例: demo/Demo3.java
  • 8. 格式化输出 常用的占位符 • 以上一节的” Now is %d o’clock” 为例, 这里的 %d就是一个占位符, 表示相应位置的参数格 式化为一个整数; 常用的占位符有: d Integral (as decimal) x Hex c Unicode character b Boolean value s String • 示例: demo/Demo4.java
  • 9. 格式化输出 String.format • JDK5同样为String类引入了静态方法实现字 符串的格式化, 其功能与前述的两种方式相 同, 示例: String s= fmt.format(“Now is %d o’clock”, 5); • 示例: demo/Demo5.java
  • 10. CharSequence • 字符串本身就是一串字符的集合, java中所 有的字符串类型包含String, StringBuffer和 StringBuilder都实现了这个接口, 接口的规范 如下: interface CharSequence { charAt(int i); length(); subSequence(int start,| int end); toString(); }
  • 11. 读取标准输入 Scanner • 应用程序往往需要扫描相关的输入来并进行相应的 处理, JDK5提供了工具类java.util.Scanner用于实现该 功能; 通过以下构造器创建Scanner对象: Scanner(File) 指定某个文件作为输入 Scanner(InputStream) 指定某个输入流作为输入 Scanner(String) 使用字符串最为扫描的对象 Scanner提供了如下工具方法: nextLine() 读取下一行; nextInt() 读取下一个token(默认使用空格分隔), 并 返回一个整数; 如果该token不能被解析 为一个整数或者超出范围则抛出异常. hasNext() 是否还有下一个token next() 返回下一个token, String类型 • 示例: demo/Demo6.java
  • 12. Scanner vs. StringTokenizer • 在JDK5之前可以使用StringTokenizer实现类 似Scanner的功能, 但是易用性不如后者; 示 例: String input = "But I’m not dead yet! I feel happy!"; StringTokenizer stoke = new StringTokenizer(input); while(stoke.hasMoreElements()) System.out.print(stoke.nextToken() + " "); • 示例: demo/Demo7.java
  • 13. StringBuffer • 与String相同, StringBuffer也表示一个字符串对 象, 示例: StringBuffer buf = new StringBuffer(“Hello”); System.out.println(buf.toString()); // Hello • 不同之处在于StringBuffer的内容是可以更改的, 它提供了如下接口用于修改字符串的内容: append 追加字符串 delete 删除指定位置的字符串 insert 在指定的位置插入字符串 replace 替换指定位置的字符串 • 示例: demo/Demo8.java
  • 14. StringBuffer vs. String vs.StringBuilder • 当需要频繁的进行字符串修改时, 使用string 是不太合适的, 因为这样会导致大量的对象 被创建和回收, 造成一定的性能因素; 在这 种情况下可以使用StringBuffer; • StringBuilder与StringBuffer的类似, 也表示可 以修改的字符串; 两者的区别在于前者是线 程安全的(thread-safe), 而后者是线程不安全 的; 这意味这前者在具体的使用中性能会稍 弱于后者.
  • 15. END