网站开发公司 广告词,产品网站策划,如何自己做网站优化,wordpress手机验证注册Java String类 文章目录 Java String类1 String1.1 常用两种创建方式1.2 比较两种创建方式1.3 字符串不可变性1.4 面试题 2 常用方法2.1 练习 3 可变字符串3.1 常用方法3.2 验证StringBuilder的高效性3.3 练习3.4 面试题: 4 正则表达式4.1 元字符4.2 其他字符4.2.1 预定义字符4…Java String类 文章目录 Java String类1 String1.1 常用两种创建方式1.2 比较两种创建方式1.3 字符串不可变性1.4 面试题 2 常用方法2.1 练习 3 可变字符串3.1 常用方法3.2 验证StringBuilder的高效性3.3 练习3.4 面试题: 4 正则表达式4.1 元字符4.2 其他字符4.2.1 预定义字符4.2.2 边界匹配4.2.3 数量 4.3 正则表达式的应用4.3.1 匹配4.3.2 拆分4.3.3 获取4.3.4 替换 1 String
Java程序中的所有字符串文本例如“abc”都是此类的实例。 字符串字面值是常量具有不可变性创建之后不可改变。
1.1 常用两种创建方式
//1 直接使用字符串字面值(双引号包裹)赋值
//数据存储在常量池中
String s1 hello;//2 使用构造方法赋值
//数据存储在堆中
String s2 new String(hello);1.2 比较两种创建方式
//常量池中数据不会重复。
String s3 hello;
System.out.println(s1 s2); //比较地址
System.out.printlin(s1.equals(s2)); //比较内容
System.out.println(s1 s3); //比较地址
res:
false
true
true字符串字面值保存在常量池中JDK1.7之前常量池存在方法区中JDK1.7包括1.7之后移入堆中常量池中数据不会重复。 1.3 字符串不可变性
//在常量池种重新开辟空间
//字符串具有不可变性:重新赋值时,不会改变原来的数据,而是重新开辟空间
s3 zhangsan
System.out.println(s3);
System.out.println(s1);
res:
zhangsan
hello内存存储方式: 1.4 面试题
eg:
String name new String(“lisi”) // 该语句在内存中创建了几个对象res:
两个, 常量池一个, 堆中一个2 常用方法
eg:
String s1 Java是世界上最好的语言,Java第一,Java真牛;public char charAt(int index)根据下标获取字符。 //1 charAt(); 返回指定位置上的字符
char first s1.charAt(0);
char last s1.charAt(s1.length() - 1);
System.out.println(first);
System.out.println(last);public boolean contains(String str)判断当前字符串中是否包含str。 //2 contains(String str)判断当前字符串中是否包含str。
boolean b s1.contains(java);
System.out.println(b);public char[] toCharArray()将字符串转换成字符数组。 //3 toCharArray(); 返回字符串的字符数组
char[] charArray s1.toCharArray();
System.out.println(charArray.length);public int indexOf(String str)查找str首次出现的下标存在则返回该下标不存在则返回-1。 //4 indexOf(); 查找str首次出现的下标存在则返回该下标不存在则返回-1。
int i s1.indexOf(Java);
int i1 s1.indexOf(Java,4);
System.out.println(i);
System.out.println(i1);//需求输出字符串中出现Java的位置
int p 0;
while ((ps1.indexOf(Java,p))!-1) {System.out.println(位置p);p4;
}public int length()返回字符串的长度。 //5 length(); 返回字符串的长度
System.out.println(s1.length());public String trim()去掉字符串前后的空格。 //6 trim()去掉字符串前后的空格。
String s1 Java是世界上最好的语言, Java第一, Java真牛 ;
System.out.println(s1.trim());public String toUpperCase()将小写转成大写。 //7 toUpperCase()将小写转成大写。toLowerCase()将大写转成小写。
String s2 Hello;
System.out.println(s2.toUpperCase());
System.out.println(s2.toLowerCase());public boolean endsWith(String str)判断字符串是否以str结尾。 /* 8 endsWith(String str)判断字符串是否以str结尾startsWith(String str)判断字符串是否以str开头
*/
String s3 hello.java;
System.out.println(s3.endsWith(java));
System.out.println(s3.startsWith(hello));public String replace(char oldChar,char newChar)将旧字符串替换成新字符串 //9 replace(char oldChar,char newChar)将旧字符串替换成新字符串
System.out.println(s1.replace(Java, java));public String[] split(String str)根据str做拆分。 //10 split(String str)根据str做拆分//以逗号或空格拆分, 表示前面的逗号或空格可以出行1次或多次String[] strings s1.split([, ]);System.out.println(strings.length);for (String s : strings) {System.out.println(s);}public String substring(int beginIndex,int endIndex)在字符串中截取出一个子字符串 //11 substring(int beginIndex,int endIndex)在字符串中截取出一个子字符串
String s4 Java是世界上最好的语言,Java第一,Java真牛;
String substring s4.substring(0, 4);
String substring1 s4.substring(s4.length() - 6);
System.out.println(substring);
System.out.println(substring1);public int compareTo(String anotherString) :比较两个字符串的大小(字符表位置,或长度) //12 compareTo() 比较两个字符串的大小(字符表位置,或长度)
String s5 abc; //97
String s6 xyz; //120
System.out.println(s5.compareTo(s6));
//如果一个字符串是另一个字符串的前缀, 比较长度
String s7 abcxyz;
System.out.println(s5.compareTo(s7));public boolean equals(Object anObject): 比较字符串是否相同 System.out.println(s5.equals(s6));public native String intern() : 判断常量池是否包含此数据
如果有, 直接返回常量池中的地址
如果没有, 复制一份地址放入常量池, 然后返回这个地址2.1 练习
eg:
需求已知String str this is a text;
将str中的单词单独获取出来
将str中的text替换为practice
在text前面插入一个easy
将每个单词的首字母改为大写res:
/*** author 胡昊龙* version 1.0* description: TODO 需求已知String str this is a text;* 将str中的单词单独获取出来* 将str中的text替换为practice* 在text前面插入一个easy* 将每个单词的首字母改为大写* date 2024/1/8 11:24*/
public class TestString04 {public static void main(String[] args) {String str this is a text;//将str中的单词单独获取出来String[] split str.split( );for (String s : split) {System.out.println(s);}//将str中的text替换为practiceString replace str.replace(text, practice);System.out.println(replace);//在text前面插入一个easyString replace1 str.replace(text, easy text);System.out.println(replace1);//将每个单词的首字母改为大写for (String s : split) {
/*方法一:String first s.substring(0, 1);first first.toUpperCase();
*///方法二char first s.charAt(0);first Character.toUpperCase(first);//拼接sfirsts.substring(1);System.out.println(s);}}
}3 可变字符串
概念可在内存中创建可变的缓冲空间存储频繁改变的字符串。
优点执行效率高于String。
StringBuilderJDK5.0提供运行效率快、线程不安全。(单)
StringBufferJDK1.0提供运行效率慢、线程安全。(多)
3.1 常用方法
创建可变字符串对象
StringBuilder builder new StringBuilder();append(String str) //1 append(); 追加内容
builder.append(java第一);
builder.append(java真牛);
System.out.println(builder);insert(String str) //2 insert(); 插入内容
builder.insert(0,java是世界上最好的语言);
System.out.println(builder);replace() //3 replace(); 替换内容
builder.replace(0,4,JAVA);
System.out.println(builder);reverse() //4 reverse(); 反转内容
builder.reverse();
System.out.println(builder);delete() //5 delete(); 删除内容
builder.delete(0,4);
builder.delete(0, builder.length());// 清空内容3.2 验证StringBuilder的高效性
eg:
用两种方式运行同一种操作, 比较所消耗时间/*** author 胡昊龙* version 1.0* description: TODO* date 2024/1/8 14:46*/
public class StringB2 {public static void main(String[] args) {//验证StringBuilder的效率String s ;long start System.currentTimeMillis();for (int i 0; i 50000; i) {si;}long end System.currentTimeMillis();System.out.println(用时: (end-start));System.out.println();StringBuilder builder new StringBuilder();long start1 System.currentTimeMillis();for (int i 0; i 50000; i) {builder.append(i);}long end1 System.currentTimeMillis();System.out.println(用时: (end1-start1));}
}res:
用时: 6438用时: 23.3 练习
把“18987425.99”转成“18,987,425.99”
public class StringB3 {public static void main(String[] args) {String s 18987425.99;StringBuilder num new StringBuilder(s);int pos num.indexOf(.);for (int i pos-3; i 0 ; i-3) {num.insert(i,,);}System.out.println(num);}
}3.4 面试题:
请说出代码的运行结果 第一题图解: 第二题图解: 如果将图2中的s4和s5换一下位置, 运行结果是? 4 正则表达式
概念: 正则表达式就是一个验证字符串格式是否满足要求的字符串使用一个字符串匹配一组字符串,这个字符串就是正则表达式。
正则表达式的用途
匹配 拆分 获取 替换
4.1 元字符
概念: 正则表达式中通常包含一些具有特殊含义的字符。
字符解释a匹配字符****a[abc]匹配 a或b或c[^abc]任何字符除了 a、b 或 c否定[a-zA-Z]a 到 z 或 A 到 Z两头的字母包括在内范围[a-d[m-p]]a 到 d 或 m 到 p[a-dm-p]并集[a-z[def]]d、e 或 f交集[a-z[ ^bc]]a 到 z除了 b 和 c[ad-z]减去[a-z[ ^m-p]]a 到 z而非 m 到 p[a-lq-z]减去
4.2 其他字符
4.2.1 预定义字符
字符解释.任意字符与行结束符可能匹配也可能不匹配\d数字[0-9]\w单****个字符[a-zA-Z_0-9]
4.2.2 边界匹配
字符解释^表示行开始$表示行结束
4.2.3 数量
字符解释X?一次或0次X*0次或多次(包括1次)X一次或多次X{n}恰好n次X{n, }至少n次X{n,m}至少n次不超过m次
4.3 正则表达式的应用
正则表达式大全
4.3.1 匹配
//1 匹配
//手机号
String reg ^1[35789][0-9]{9}$;
String phone 11632145345;
System.out.println(phone.matches(reg));//创建模式对象
Pattern p Pattern.compile(^1[35789][0-9]{9}$);
//获取匹配器
Matcher m p.matcher(16632145345);
//调用匹配器的matcher()
boolean b m.matches();
System.out.println(b);//qq邮箱
String reg2 ^[1-9][0-9]{4,9}[qQ]{2}.[cC][oO][Mm]$;
String qq 14312354Qq.com;
System.out.println(qq.matches(reg2));4.3.2 拆分
//2 拆分
String s this is a text;
/*一个符号用双引号包裹即可多个符号先用双引号再用中括号包裹 表示前面的符号可以出行1次或多次
*/
String[] arr s.split([ .]);
System.out.println(arr.length);
for (String string : arr) {System.out.println(string);
}4.3.3 获取
//3 获取
String s1 Java是世界上最好的语言,java第一,Java真牛;
//需求: 获取字符串中的 Java 字符 (不区分大小写)
Pattern p1 Pattern.compile([jJ]ava);
Matcher m1 p1.matcher(s1);
//find(); 找到则返回true, 没有找到则返回false
while (m1.find()) {//group(); 返回找到的数据System.out.println(m1.group());
}4.3.4 替换
//4 替换
String s2 s1.replaceAll([jJ]ava, JAVA);
System.out.println(s2);Pattern p3 Pattern.compile([jJ]AVA);
Matcher m3 p3.matcher(s2);
String s3 m3.replaceAll(Python);
System.out.println(s3);