1、String类
1.1 构造String对象1.2 String类的常用方法1.3 String与基本数据类型的相互转化
1.3.1 String -> int1.3.2 数字转化为字符串 1.4 字符序列与字符、字节数组
1.4.1 字符序列与字符数组 2.正则表达式
2.1正则表达式与元字符2.2常用的正则表达式
2.2.1 匹配形如数字的正则表达式2.2.2 匹配如email正则2.2.3 匹配身份证号码2.2.4 匹配日期的正则表达式 2.3 字符序列的替换与分解 3. StringTokenizer类4.Scanner类5.Pattern与Match类6.StringBuffer类
6.1 StringBuffer对象的创建6.2 StringBuffer常用方法 7. 日期与时间
1、String类
java.lang包种的String类是final类,用户不能扩展String类,即String类不可以有子类
1.1 构造String对象用String类的构造方法创建String对象
String s = new String("Hello world!");
也可以用字符数组创建String类的对象
char a = ['b','o','y']; String s = new String(a);
String的构造方法是:String(char a[], int startIndex, int count) 提取字符数组a中的一部分创建一个String对象。
1.2 String类的常用方法- int length() 求字符串长度boolean equals(String s)比较当前String对象的字符序列是否与参数s指定的String对象的字符序列相同
面试题: “equal"和”=="一样吗?
答: equal比较的是字符串序列的值是否相等,而==比较的是两个变量的引用是否相等。
- boolean startsWith(String s) 判断字符串前缀是否是s指定的参数int compareTo(String s) 比较两个字符串的大小 s大的话返回1相等0小于-1int compareTOIgnoreCase(String s)比较两个字符串大小,忽略大小写boolean contains(String s)判断当前String对象的字符序列是否含有s的字符序列,有返回trueint indexOf(String s,int startpoint) 返回字符第startpoint出现时的下标String substring(int start,int end) 截取字符串,前闭后开String trim() 返回去掉前后空格的字符串
int x; String s ="1234"; x = Integer.parseInt(s);
如果参数含有非数字或者超出int范围会报异常:NumberFormatException
有时候我们会把“12,123,334¥”转化为数字
String currency = "12,123,334¥"; String str = "###,###¥"; DecimalFormat df = new DecimalFormat(str); Number num = df.parse(currency); double d = num.doublevalue();1.3.2 数字转化为字符串
String str = 3.14+"";
String str = String.valueOf(12313,98132);1.4 字符序列与字符、字节数组 1.4.1 字符序列与字符数组
将当前String对象的字符序列中的一部分字符复制到参数c指定的数组当中,将String对象的字符序列中从索引位置start到end-1
位置上的字符复制到数组c中,并从数组c的offset开始存放这些字符。
public void getChars[int start, int end, char c[], int offset];
样例:
public static void main(String[] args) throws ParseException {
char[] str = new char[10];
String str2 = "helloworld";
str2.getChars(0,str2.length(),str,0);
System.out.println(str);
}
输出:helloworld
String对象调用下面方法,将它的字符序列一次存放在一个字符数组的单元中,返回该数组的引用
public char[] toCharArray()
public static void main(String[] args) throws ParseException {
char[] a;
a= "大家好!我是小王!".toCharArray();
System.out.println(a);
}
输出:大家好!我是小王!
2.正则表达式 2.1正则表达式与元字符String对象调用
public boolean matches(String regex)
方法可以判断当前字符序列是否和参数regex指定的正则表达式相匹配
下表表示了常用元字符及其意义
| 写法 | 意义 |
|---|---|
| . | 代表任意一个字符 |
| d | 代表0-9任何一个数字 |
| D | 代表任何一个非数字字符 |
| s | 代表空格类字符 |
| s | 代表非空格类字符 |
| w | 代表可用于标识符的字符(不包括美元符号) |
| W | 代表不能用于标识符的字符 |
| p{Lower} | 小写字母[a~z] |
| p{Upper} | 大写字母[A~Z] |
| p{ASCII} | ASCLL字符 |
| p{Alpha} | 字母 |
在正则表达式中可以用中括号括起若干个字符来表示一个元字符,该元字符代表中括号中的任何一个字符。例如String regex="[159]ABC"那么‘1ABC’,5ABC,'9ABC’都和regex相匹配。中括号元字符的意义如下:
[a,b,c]:代表abc中的任何一个[^abc]:代表除了a,b,c以外任意字符[a-zA-Z]代表所有英文字母中的一个[a-d]a-d中的任何一个另外中括号中允许嵌套中括号,可以进行交、并、差运算,举例如下:[a-d[m-p]]:代表a-d或者m-p中的任何字符[a-z&&[def]]代表d、e、f中的任何一个
在正则表达式中可以使用限定修饰符。例如,对于限定修饰符“?”,如果X代表正则表达式中的一个元字符或普通字符,那么“X?”就代表X出现0次或者1次,例如:
String regex = "hello[246]?";
表示:‘hello’、‘hello2’、hello4、hello6都与regex匹配。
下表给出常用的限定修饰符的用法
| 带限定符号的模式 | 意义 |
|---|---|
| X? | X出现0次或者1次 |
| X* | X出现0次或者多次 |
| X+ | X出现1次或者多次 |
| X{n} | X出现恰好n次 |
| X{n,} | X至少出现n次 |
| X{n,m} | X出现n~m次 |
| XY | X的后缀是Y |
| X | Y |
给出匹配形如整数和浮点数的正则表达式。
String regex = "-?[1-9]\d+"
任何形如整数的字符序列都与regex相匹配,例如“123123”和“-98”
String regex = "-?[0-9][0-9]*[.][0-9]+";
任何浮点数的字符序列都与regex相匹配。
2.2.2 匹配如email正则String regex = "\w+@\w+\.[a-z]+(\.[a-z]+)?"2.2.3 匹配身份证号码
String regex = "[1-9][0-9]{16}[a-zA-Z0-9]{1}";
2.2.4 匹配日期的正则表达式
String year = "[1-9][0-9]{3}";
String month = "((0?[1-9])|(1[012]))";
String day = "((0?[1-9])|([12][0-9])|(3[01]?))";
String regex = year + "[-./]" + month + "[-./]" + day;
2.3 字符序列的替换与分解
public String replaceAll(String regex, String replacement);
返回一个新的String对象,返回的String对象的字符序列是把当前String对象的字符序列中,所有和参数regex相匹配的字符序列替换成参数replacement指定的字符序列所得到的字符序列,例如:
String s = "12hello763";
String res = s.replaceAll("\d+","你好");
输出:你好hello你好
String类中还提供了一个实用的方法:
public String[] split(String regex)
使用正则表达式作为分隔标记,分解出String对象的字符序列中的单词,并将分解出的单词存放到String数组中。例如:
String s = "在2022年3月4号我写下这篇博客";
String digitWord[] = s.split("\D+");
for (int i = 0; i < digitWord.length; i++) {
System.out.println(digitWord[i]);
}
输出:2022、3、4
3. StringTokenizer类 4.Scanner类 5.Pattern与Match类 6.StringBuffer类 6.1 StringBuffer对象的创建由于String类是final类,String对象不能修改删除替换字符串序列中的某个字符,String对象一旦创建,实体就不可以再发生变化,这样的对象是 不可变对象
StringBuffer buffer = new StringBuffer();
但是StringBuffer类可以创建修改字符序列,也就是说该对象实体的内存空间可以自动的改变,下面列举它的3个构造方法:
StringBuffer()StringBuffer(int size)StringBuffer(String s)
第一个无参数的构造方法创建一个StringBuffer对象,初始分配16个字符的内存,超出再自动增加,通过length()方法可以获取字符序列长度,通过capacity()方法可以得到该实体的实际容量。
第二个构造方法可以指定初始容量为size的字符个数,超出再自动增加
第三个构造方法可以分配初始容量=String s字符序列长度+16个字符,超出再自动增加
- StringBuffer append()追加字符char charAt(int n) 获取n位置的字符void setCharAt(int n,char ch) 替换n位置的字符StringBuffer insert(int index,String str) 将字符串插入到index位置上,返回当前对象的引用StringBuffer reverse() 反转字符串StringBuffer delete(int startindex,int endindex) 删除字符串从startindex到endindex-1StringBuffer replace (int startindex,int endindex,String str) 将 startindex到endindex-1的字符串替换为str



