黑马程序员_StringBuffer&正则表达式总结

本文详细介绍了Java中的StringBuffer类及其常用方法,并深入探讨了正则表达式的使用技巧,包括匹配、切割、替换及获取等核心操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



------------------------------------------------android培训java培训期待与您交流!-----------------------------------------------

StringBuffer

①特点
是一个容器,长度是可变化的,可以字节操作多个数据类型,最终会通过toString方法变成字符串

②重要方法

ⓐ存储
StringBuffer append():将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(index,数据):可以将数据插入到指定index位置。
ⓑ删除
StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(index):删除指定位置的字符。 
ⓒ获取
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end)
ⓓ修改
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ;
ⓔ反转
StringBuffer reverse();
ⓕ将缓冲区中指定数据存储到指定字符数组中
srcBegin,srcEnd源的开始和结束位置;dst,dstBegin目的数组和从目的数组的第几位开始存
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

正则表达式
①作用
用于专门操作字符串,用于一些特定的符号来表示一些代码操作
②好处
可以简化对字符串的复杂操作
③弊端
符号定义越多,正则越长,阅读性越差

④常见正则表达式规则(方便以后查找)

ⓐ字符类
[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](减去)

ⓑGreedy 数量词
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次

ⓒ边界匹配器
^ 行的开头
$ 行的结尾
\b 单词边界
\B 非单词边界
\A 输入的开头
\G 上一个匹配的结尾
\Z 输入的结尾,仅用于最后的结束符(如果有的话)
\z 输入的结尾

⑤匹配
用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false
String tel = "16900001111";
匹配第一位为1第二位为358中的一个,后面9位为数字
String telReg = "1[358]\\d{9}";
System.out.println(tel.matches(telReg));
 
⑥切割

String split();
public static void splitDemo(String str,String reg)
 {
  String[] arr = str.split(reg);  
  System.out.println(arr.length);
  for(String s : arr)
  {
   System.out.println(s);
  }
 }

按照多个空格来进行切割
splitDemo("zhangsan lisi   wangwu"," +");
以.进行切割
splitDemo("zhangsan.lisi.wangwu","\\.");
以\\进行切割
splitDemo("c:\\abc\\a.txt","
\\\\ ");
按照叠词的形势进行切割,(.)代表任意一个字符,并且用()分了组,
\\1 +代表和前面的字符相同有一个和多个,\n(n就是组的编号)
splitDemo("erkktyqqquizzzzzo","(.)\\1+");

⑦替换           

public static void replaceAllDemo(String str,String reg,String newStr)
{
    str = str.replaceAll(reg,newStr);
    System.out.println(str);
}

String str = "wer1389980000ty1234564uiod234345675f";
将字符串中超过5位数的数字替换成#
replaceAllDemo(str,"
\\d{5,}","#");
String str1 = "erkktyqqquizzzzzo";
将重叠的字符替换成单个字母。zzzz->z,其中$1代表第一组的内容
replaceAllDemo(str1,"(.)\\1+","$1");
⑧获取
将字符串中的符合规则的子串取出

public static void getDemo()
 {
  String str = "ming tian jiu yao fang jia le ,da jia。";
  //取出四个字符的单词\b代表以字符为边界
  String reg = "\\b[a-z]{4}\\b";
  //将规则封装成对象。
  Pattern p = Pattern.compile(reg);
  //让正则对象和要作用的字符串相关联。获取匹配器对象。
  Matcher m  = p.matcher(str);
  matches方法匹配是指针会移动
  System.out.println("matches:"+m.matches());
  //尝试查找与该模式匹配的输入序列的下一个子序列
  while(m.find())
  {
   //返回由以前匹配操作所匹配的输入子序列
   System.out.println(m.group());
   System.out.println(m.start()+"...."+m.end());
  }
 }

正则表达式的一些例子

①从网页上获取邮件的地址

String mail = "abc12@sina.com";
对邮箱的匹配[a-zA-Z0-9_]+表示一位或者多位任意字符和数字
\\.[a-zA-Z]+表示以.后面跟一位或者多位任意字符
(
\\.[a-zA-Z]+)+表示有多个组匹配这种情况.com.cn
String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(
\\.[a-zA-Z]+)+";//较为精确的匹配。

public static void getMails_1()throws Exception
	{
		URL url = new URL("http://192.168.1.254:8080/myweb/mail.html");
		URLConnection conn = url.openConnection();
		BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));
		String line = null;
		String mailreg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
		Pattern p = Pattern.compile(mailreg);
		while((line=bufIn.readLine())!=null)
		{
			Matcher m = p.matcher(line);
			while(m.find())
			{
				System.out.println(m.group());
			}
		}
	}
②将重复的字符去掉

String str = "我我...我我...我要..要要...要要...学学学....学学...编编编...编程..程.程程...程...程";
将重复的.号去掉
str = str.replaceAll("\\.+","");
System.out.println(str);
将重复的字去掉
str = str.replaceAll("(.)\\1+","$1");
System.out.println(str);

③将ip地址进行地址段顺序的排序
排出的结果应该是2.2.2.2   8.109.90.30 10.10.10.10等等 

public static void ipSort()
	{
		String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";
		先将字符串补上00保证每一位数都在3位及以上
		ip = ip.replaceAll("(\\d+)","00$1");
		System.out.println(ip);
		把超过三位的多余0去掉
		ip = ip.replaceAll("0*(\\d{3})","$1");
		System.out.println(ip);
		String[] arr = ip.split(" ");
		对字符串进行排序
		TreeSet<String> ts = new TreeSet<String>();
		for(String s : arr)
		{
			ts.add(s);
		}
		for(String s : ts)
		{
			//把002.002.002.002这样的IP地址变为2.2.2.2
			System.out.println(s.replaceAll("0*(\\d+)","$1"));
		}
	}


-----------------------------------------android培训java培训、java学习型技术博客、期待与您交流! --------------------------


详情请查看:http://edu.youkuaiyun.com/heima



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值