一.字符串
(1)字符串的表示
java.lang.String 代表不可变的字符序列,String用来表示由字符组成的序列,是最常用的一种引用数据类型,另外一个字符串就是一个字符(Char)类型的数组。
(2)字符串的创建
• 标准:
先声明后使用
• 创建方法
(1)直接赋值:String str = "this is a string";
(2)创建实体:String s = new String("this is a string");
(3)用字符型数组创建:String(char a[])
char a[] = {'a','b','c'};
String s = new String(char a[])
(4)用字节型数组创建一个字符串:String(byte[]bytes,int offset,int length)
public class StringTest {public static void main(String[] args) {// TODO Auto-generated method stub//1.直接输出String s = "this is a string";String s1 = "this is a string";//2.通过创建实体String s2 = new String("this is a string");String s3 = new String("this is a string");//3.char[]字节型进行传递char a[] = {'a','b','c'};String s4 = new String(a);//4.char[]字符数组取一段输出String s5 =new String(a,0,3);//输出(两种对比方式)System.out.println(s.equals(s1));//trueSystem.out.println(s==s1);//trueSystem.out.println(s2==s3);//falseSystem.out.println(s2.equals(s3));//trueSystem.out.println(s4==s5);//falseSystem.out.println(s4.equals(s5));//true/*summary: * == 是判断两个是否相同,new创建实体后因为实体不相同,所以不相同* equals 是判断两个字符串的内容是不是相同,只看内容* end */}}
(3)字符串常用方法
• public char charAt( int index) 返回字符串中第index个字符
• public int length() 返回字符串的长度
• public int indexOf(String str ) 返回字符串中出现str的第一个位置
• public boolean equals( String another) 比较字符串与another是否完全一样
• public boolean equalsIgnoreCase( String another) 比较字符串与another是否一样(忽略大小写)
• public String replace( char oldChar ,char newChar) 在字符串中用newChar字符替换oldChar字符
• public boolean startsWith(String prefix) 判断字符串是否以prefix字符串开头
• public boolean endsWith(String suffix) 判断字符串是否以suffix字符串开头
• public String toUpperCase() 一个字符串为该字符串的大写形式
• public String toLowerCase() 一个字符串为该字符串的小写形式
• public String substring(int beginIndex) 返回该字符串从beginIndex开始到结尾的子字符串
• public String substring(int beginIndex,int endIndex) 返回该字符串从beginIndex开始到endIndex的子字符串
• public String trim( ) 去掉字符串开头和结尾的空格
• public String [ ] split (String regex)字符串以指定分隔符号分隔,返回分割后的字符串数组
import java.util.*;public class StringTest {public static void main(String[] args) {// TODO Auto-generated method stubString s = "hello World!";String s1 = "Hello World!";System.out.println(s.charAt(2));//输出指定字符System.out.println(s.length());//输出字符串的长度System.out.println(s.indexOf('l'));//输出出现第一个字符的位置System.out.println(s.equals(s1));//查看两个字符串是不是相同System.out.println(s.equalsIgnoreCase(s1));//不区分大小写System.out.println(s.replace('e','a'));//替换字符串中所有相同的值System.out.println(s.startsWith("hello"));//判断是不是以某段字符串开头//注意是字符串,如果是字符会发生报错System.out.println(s.endsWith("World"));//判断是不是以某段字符串结尾//同样必须是字符串,双引号,否则会发生报错System.out.println(s.toUpperCase());//全部转换成大写System.out.println(s.toLowerCase());//全部转换成小写System.out.println(s.substring(2));//返回从输入数字位置到结尾的字符串System.out.println(s.substring(2, 4));//返回两个数字之间的字符串System.out.println(s.trim());//去掉空格形式String s2 = "jason,2,1976";String splitStr[] = s2.split(",");//字符分割for(int i = 0;i}
(4)字符分析器StringTokenizer(不推荐,理解别人写的就行,作为了解)
• 构造方法:StringTokenizer(String str, String delim)
将指定字符串str按字符delim为分隔符进行分解。
• 常用方法:
• hasMoreTokens():检测字符串中是否还有语言符号,若有语言符号就返回true,否则返回false。
• nextToken():逐个获取字符串中的语言符号。
• countTokens():计算调用了nextToken()方法的次数,用于统计字符串中的语言符号的个数。
(相当于lengh()方法)
(5)Pattern和Matcher类(重点)
• import java.util.regex
• 模式对象和匹配器对象
Pattern pattern1 = Pattern.compile(String regex);
Matcher matcher1 = pattern1.matcher(CharSequence input);
matches( ):字符串匹配,返回true或false
• 查找和替换(Matcher类)
replaceAll(String replacement):替换给定的字符串。
appendReplacement(StringBuffer sb, String replacement):通过字符串缓冲区sb替换 给定的字符
串。
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class StringTest {public static void main(String[] args) {// TODO Auto-generated method stubPattern pattern1, pattern2,pattern3,pattern4;//模式类Matcher matcher1,matcher2,matcher3,matcher4;//匹配器类//1.匹配判断是不是符合想要的字符串pattern1 = Pattern.compile("^java.*");//里面是正则表达式(目标:源字符串)matcher1 = pattern1.matcher("java是一种程序语言");//匹配规则boolean b = matcher1.matches();System.out.println(b);//2.分割:以多条件分割字符串时pattern2 = Pattern.compile("[, |]");String[] strs = pattern2.split("java Hello World java,hello,,world||Sun");System.out.println("分割字符串");for(int i = 0;i}
(6)正则表达式
元字符:正则表达式规定的一个特殊代码,代表着单词的开头或结尾,也就是单词的分界处,它本身不代表英语中空格、标点符号、换行等单词分隔符,只是用来匹配一个位置。 转义字符: \ ,想查找元字符本身的话,比如 “.” 或者 “*”。例子:\. 或 \*
重复限定符
二.StringBuffer类
(1)简介
• java.lang.StringBuffer 代表可变的字符序列
• StringBuffer类的常见构造方法
StringBuffer() 创建一个不包含字符序列的“空“的StringBuffer对象
StringBuffer(String str)创建一个StringBUffer对象,包含与String对象str相同的字符序列。
(2)具体操作:
• 添加字符序列并返回
• public StringBuffer append(String str)
• public StringBuffer append(char[ ] str,int offset, int len)
• 指定位置插入字符序列并返回
• public StringBuffer insert(int offset, String str)
• public StringBuffer insert(int offset, double d)
• 删除start开始到end-1为止的一段字符序列,并返回
• public StringBuffer delete(int start, int end)
• 将字符序列逆序(重置)
• public StringBuffer reverse()
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class StringTest {public static void main(String[] args) {// TODO Auto-generated method stubString s ="Mirc";char c[] = {'a','b','c'};StringBuffer sb1 = new StringBuffer(s);System.out.println(sb1);//对字符串进行添加,逐个添加sb1.append("/").append("sun").append("/").append("oracle");StringBuffer sb2 = new StringBuffer("数字");//对char类型进行添加for(int i = 0;i}
(3)其他事项:StringBuffer VS StringBulider
• StringBuffer 与 StringBuilder 中的方法和功能完全是等价的。
• StringBuffer 采用了synchronized 关键字进行修饰,安全性比较高,不过每次都需要判断锁,效率相对更低。
• 在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全。