StringBuilder类
由于String是不变对象,每次修改内容都要创建新对象,因此String不适合做频繁修改操作.为了解决这个问题,java提供了StringBuilder类.
package string;
/**
* 频繁修改字符串带来的性能损耗.
*/
public class StringDemo2 {
public static void main(String[] args) {
String str = "a";
for(int i=0;i<10000000;i++){
str = str + str;
}
System.out.println("执行完毕!");
}
}
StringBuilder是专门用来修改String的一个API,内部维护一个可变的char数组,修改都是在这个数组上进行的, 内部会自动扩容.修改速度和性能开销优异.并且提供了修改字符串的常见操作对应的方法:增删改插
package string;
/**
* java.lang.StringBuilder
* 专门用来修改String的一个API,内部维护一个可变的char数组,修改都是在这个数组上进行的,
* 内部会自动扩容.修改速度和性能开销优异.并且提供了修改字符串的常见操作对应的方法:增删改插
*/
public class StringBuilderDemo1 {
public static void main(String[] args) {
String str = "好好学习java";
//内部默认表示一个空字符串
// StringBuilder builder = new StringBuilder();
//复制给定字符串到StringBuilder内部
// StringBuilder builder = new StringBuilder(str);//不是线程安全的
StringBuffer builder = new StringBuffer(str);//是线程安全的
/*
好好学习java
好好学习java,为了找个好工作!
append:追加内容
*/
builder.append(",为了找个好工作!");
System.out.println(builder);//输出StringBuilder的内容
//通过调用toString方法将StringBuilder内容以字符串形式返回.
str = builder.toString();
System.out.println(str);
/*
好好学习java,为了找个好工作!
好好学习java,就是为了改变世界!
replace:替换部分内容
*/
builder.replace(9,16,"就是为了改变世界");
System.out.println(builder);
/*
好好学习java,就是为了改变世界!
,就是为了改变世界!
delete:删除部分内容
*/
builder.delete(0,8);
System.out.println(builder);
/*
,就是为了改变世界!
活着,就是为了改变世界!
insert:插入操作
*/
builder.insert(0,"活着");
System.out.println(builder);
//翻转字符串
builder.reverse();
System.out.println(builder);
}
}
StringBuffer 和StringBuilder
– StringBuffer是线程安全的,同步处理的,性能稍慢
–StringBuilder是非线程安全的,并发处理的,性能稍快
package string;
/**
* StringBuilder修改字符串的性能
*/
public class StringBuilderDemo2 {
public static void main(String[] args) {
StringBuilder builder = new StringBuilder("a");
for(int i=0;i<10000000;i++){
builder.append("a");
}
System.out.println("执行完毕!");
}
}
正则表达式
正则表达式是用来描述一个字符串的内容格式,使用它通常用来匹配一个字符串的内容是否符合格式要求.
基本语法
[]:表示一个字符,该字符可以是[]中指定的内容
例如:
[abc] 这个字符可以是a或b或c [a-z] 表示任意一个小写字母 [a-zA-Z] 表示任意一个字母 [a-zA-Z0-9_] 表示任意一个数字字母下划线 [abc] 该字符只要不是a或b或c预定义字符
.:"."表示任意一个字符,没有范围限制
\d:表示任意一个数字,等同于[0-9]
\w:表示任意一个单词字符,等同于[a-zA-Z0-9_]
\s:表示任意一个空白字符.
\D:表示不是数字
\W:不是单词字符
\S:不是空白字符
量词:
-
?:表示前面的内容出现0-1次
例如:
[abc]? 可以匹配:a 或 b 或 c 或什么也不写
-
+:表示前面的内容出现1次以上
[abc]+ 可以匹配:aaaaaaaaaa...或abcabcbabcbabcbabcbabbabab....
但是不能匹配:什么都不写或abcfdfsbbaqbb34bbwer...
-
*:表示前面的内容出现任意次(0-多次)
匹配内容与+一致,只是可以一次都不写.
-
{n}:表示前面的内容出现n次
例如:
[abc]{3} 可以匹配:aaa 或 bbb 或 aab
不能匹配:aaaa或aad
-
{n,m}:表示前面的内容出现最少n次最多m次
[abc]{3,5} 可以匹配:aaa 或 abcab 或者 abcc
不能匹配:aaaaaa 或 aabbd
-
{n,}:表示前面的内容出现n次以上(含n次)
[abc]{3,} 可以匹配:aaa 或 aaaaa.... 或 abcbabbcbabcbabcba....
不能匹配:aa 或 abbdaw...
-
()用于分组,是将括号内的内容看做是一个整体
例如:
(abc){3} 表示abc整体出现3次. 可以匹配abcabcabc.
不能匹配aaa 或abcabc
(abc|def){3}表示abc或def整体出现3次.
可以匹配: abcabcabc 或 defdefdef 或 abcdefabc
String支持正则表达式的相关方法
matches方法
boolean matches(String regex)
使用给定的正则表达式验证当前字符串是否满足格式要求,满足则返回true.否则返回false
package string;
public class MatchesDemo {
public static void main(String[] args) {
/*
邮箱的正则表达式
用户名@域名
[email protected]
[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\.[a-zA-Z]+)+
*/
String mail = "[email protected]";
String regex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
boolean match = mail.matches(regex);
if(match){
System.out.println("是邮箱");
}else{
System.out.println("不是邮箱");
}
}
}
split方法
String[] split(String regex)
将当前字符串按照满足正则表达式的部分进行拆分,将拆分后的每部分以数组形式返回.
package string;
import java.util.Arrays;
public class SplitDemo {
public static void main(String[] args) {
String str = "abc123def456ghi";
//按照数字部分拆分,获取其中每部分字母
String[] arr = str.split("[0-9]+");
System.out.println(arr.length);
System.out.println(Arrays.toString(arr));
str = "123,456,789,023";
//拆分出所有的数字部分
arr = str.split(",");
System.out.println(Arrays.toString(arr));
//如果连续遇到拆分项,则会拆分出一个空字符串.但是在字符串末尾连续遇到则忽略.
str = ",,,123,,,456,789,023,,,,";
//拆分出所有的数字部分
arr = str.split(",");
System.out.println(Arrays.toString(arr));
str = "123.456.789.023";
//拆分出所有的数字部分
arr = str.split("\\.");//.在正则表达式中表示任意字符,要注意转意!
System.out.println(Arrays.toString(arr));
}
}
replaceAll方法
String replaceAll(String regex,String str)
将当前字符串中满足正则表达式的部分替换为给定内容
package string;
public class ReplaceAllDemo {
public static void main(String[] args) {
String str = "abc123def456ghi";
//将当前字符串中的数字部分替换为#NUMBER#
str = str.replaceAll("[0-9]+","#NUMBER#");
System.out.println(str);
}
}
标签:String,StringBuilder,System,str,println,out From: https://www.cnblogs.com/worldTree/p/17631917.html