Matcher.appendReplacement(StringBuffer sb, String replacement)解析

Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
      m.appendReplacement(sb, "dog");
}
m.appendTail(sb);
System.out.println(sb.toString());

//appendReplacement函数的功能
//将从上一次匹配成功的下一个位置还有这一个匹配成功的开始的上一次位置+这一次匹配的字符串
//第一次匹配成功的最后一个的位置是-1
//text:为匹配器赋予的原始文本也就是待匹配文本
//lastAppendPosition:上一次追加的位置,第一次为0
//first:这一个匹配成功的开始位置
//将原始文本的从上一次匹配成功的最后位置到这次匹配成功开始的位置追加到sb
//例如text: one cat two cats in the yard lastAppendPosition:0 first:4  res:one空格
sb.append(text, lastAppendPosition, first);
//在将匹配上的字符串处理后再追加到sb后面
sb.append(result);
//这下最后追加的位置就是这个匹配成功的最后的位置
lastAppendPosition = last;

时间: 2024-10-06 07:13:34

Matcher.appendReplacement(StringBuffer sb, String replacement)解析的相关文章

String、StringBuilder、 StringBuffer 深入分析 源码解析

java学习有一段时间了,但学习的东西都是框架等东西,java基础知识有点遗忘,所以重温一下java基础知识,写写文章里面有错的希望大家指正共同进步~~ 一.String 大家经常会说使用"+"号连接String 字符串比StringBuffer慢,String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,那接下来我们详细分析一下为什么使用"+"号速度会慢,为什么String 对象是不可变对象: 1.final修饰类.引用变量.基

Java基础知识强化44:StringBuffer类之StringBuffer和String的相互转化

1. String和StringBuffer的相互转换 思想是:A-----B的转换,我们把A转换为B,其实是为了使用B的功能:B-----A的转换,我们可能的结果是A类型,所以还要转换回来 2. 案例演示: 1 package cn.itcast_07; 2 3 /* 4 * 为什么我们要讲解类之间的转换: 5 * A -- B的转换 6 * 我们把A转换为B,其实是为了使用B的功能. 7 * B -- A的转换 8 * 我们可能要的结果是A类型,所以还得转回来. 9 * 10 * Strin

java StringBuffer,StringBuilder,String自身连接效率对比

当我们仅仅需要a+b 的时候,两个字符串链接任何方法的效率基本一样,都在0.0001毫秒内就可以完成.不过如果需要1万次,10000万次,就会发现string自身的join速度显著下降 package com.java.lang; public class StringTest { int MAX = 10000; //1万次累加 public String Buffer(){ StringBuffer sb = new StringBuffer(); for(int i = 0; i < MA

2017.4.16 StringBuilder &amp; StringBuffer关键源码解析

String.StringBuilder.StringBuffer的异同点 结合之前写的博文,我们对这三个常用的类的异同点进行分析: 异: 1>String的对象是不可变的:而StringBuilder和StringBuffer是可变的. 2>StringBuilder不是线程安全的:而StringBuffer是线程安全的 3>String中的offset,value,count都是被final修饰的不可修改的:而StringBuffer和StringBuilder中的value,cou

全面解释java中StringBuilder、StringBuffer、String类之间的关系

http://www.jb51.net/article/33398.htm String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间,StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象,StringBuffer和StringBuilder类功能基本相似 1. String 类  String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不

ArrayList和Vector的区别?HashMap和HashTable的区别?StringBuilder、StringBuffer和String的区别?

ArrayList和Vector的区别?从两个方面 1.同步性:ArrayList是线程不安全的,是非同步的:Vector是线程安全的,是同步的.(Java中线程的同步也就满足了安全性) 2.数值增长:ArrayList每次增长为原来的50%;Vector每次增长为原来的100%; (从内部实现机制来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当向集合中添加对象时,如果内部数组长度不够用时,长度会自动增长.ArrayList会增长为原来的1.5倍,Vecto

StringBuilder、StringBuffer和String三者的联系和区别(转)

StringBuilder.StringBuffer和String三者的联系和区别 1. String 类    String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间.    String a = "a"; //假设a指向地址0x0001    a = "b";//重新赋值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的,a 已

java中StringBuilder、StringBuffer、String类之间的关系

今天在CSDN的高校俱乐部里看到了"Java基础水平測试(英文)".感觉自己学了java这么久,想看下自己的java水平究竟是个什么样.測试结果就不说了,反正是慘不忍睹. 看了一下结果分析,关于StringBuilder.StringBuffer.String类的三道题所有答错.所以就查阅了一些资料记录一下. String的值是不可变的,这就导致每次对String的操作都会生成新的String对象.不仅效率低下,并且大量浪费有限的内存空间,StringBuffer是可变类.和线程安全的

Stringbuffer 与String

StringBuffer与String主要的区别是: 1.StingBuffer在进行字符串处理时不生成新的对象,但是String的每次修改都是产生新的对象,所以在内存上StringBuffer优于String 2.StirngBuffer只能通过构造函数建立. StringBuffer stringbuffer=new StringBuffer("ab"); 注意:不能通过赋值符号赋值!! 3.String str = new String("welcome to &quo