文档章节

java 查找、替换

隆回水哥
 隆回水哥
发布于 2015/09/30 11:56
字数 340
阅读 150
收藏 6

     在工作中经常用到的查找替换方式是String的replace、replaceAll。不过配合使用Pattern、Matcher、StringBuffer可以实现更灵活的替换。代码如下,重点看一下“动态替换”。

import static org.junit.Assert.*;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.junit.Test;

/**
 * java查找替换
 * 
 * @author wei.ss
 * 
 */
public class JavaSearchReplace {

    @Test
    public void test() {

        // String的替换方法
        String content = "aaaaa";

        // 替换第一个,第一个参数支持正则表达式
        assertEquals("baaaa", content.replaceFirst("a", "b"));
        assertEquals("baaaa", content.replaceFirst("[a-z]", "b")); // 正则表达式

        // 按字符替换: 替换所有查找到的字符。显然第一个参数不支持正则表达式
        assertEquals("bbbbb", content.replace('a', 'b'));
        // 按字符串替换:替换所有查找到的字符串,第一个参数不支持正则表达式。
        assertEquals("bbbbb", content.replace("a", "b"));

        // 替换所有:和replace(String, String)方法不同的是,replaceAll第一个参数还支持正则表达式
        assertEquals("bbbbb", content.replaceAll("a", "b"));
        assertEquals("bbbbb", content.replaceAll("\\w", "b")); // 正则表达式

        
        // 重点注意一下:动态替换。
        // 需求是:将所有查找到的a字母依次替换为1,2,3,依次类推,最后的结果应该是"xxxxx1xx2345xx6yyy"
        content = "xxxxxaxxaaaaxxayyy";
        String expected = "xxxxx1xx2345xx6yyy"; // 期望的结果
        StringBuffer sb = new StringBuffer();
        Pattern p = Pattern.compile("a");
        Matcher m = p.matcher(content);
        int i = 1;
        while (m.find()) {
            m.appendReplacement(sb, i++ + "");
        }
        m.appendTail(sb); // 把字符串的尾部也附加上,不然"yyy"将会丢失。

        // 验证结果
        assertEquals(expected, sb.toString());
    }
}


© 著作权归作者所有

隆回水哥
粉丝 14
博文 49
码字总数 18518
作品 0
深圳
高级程序员
私信 提问
java jre精简瘦身(转载学习)

打开JRE安装目录.目录包括bin,lib二个文件夹,所以就是将这两个文件进行瘦身了, 1. bin: 可以认为这是Java虚拟机. 2. lib: 执行class文件时,Java虚拟机需要用到的类库及资源文件. 一、bin瘦...

小海bug
2018/10/11
0
0
java正则表达式对字符串的操作

学习java正则表达式的都知道,它的重要性;但同时也了解它的难度和复杂性。所以为了加深我们对它的了解。我举了几个例子: 例子1、 查找以Java开头,任意结尾的字符串 Pattern pattern = Patt...

goqin
2012/06/29
0
0
No suitable java found.In order to properly use...

No suitable java found.In order to properly use the android developer tools...遇到此问题时,将 你的SDK解压后的文件名toolslib下的findjava替换为版本r16版中的findjava,下载地址 ht...

LiangX
2013/05/05
0
0
【转帖】Eclipse快捷键指南

编辑 作用域 功能 快捷键 全局 查找并替换 Ctrl+F 文本编辑器 查找上一个 Ctrl+Shift+K 文本编辑器 查找下一个 Ctrl+K 全局 撤销 Ctrl+Z 全局 复制 Ctrl+C 全局 恢复上一个选择 Alt+Shift+↓...

穿越星辰
2010/05/13
22
0
eclipse使用快捷键(大全)

1. eclipse中快捷键输出System.out.println(""...是打sysout 或者syso +Alt + / 激活键, eclipse默认的是sysout或者syso 再加Alt + / 就可以输出 eclipse快捷键大全 申精.! eclipse快捷键大......

长平狐
2013/07/01
12.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

rsync工具常用选项以及同步的两种方式

rsync -av /etc/passwd /tmp/1.txt #rsync的本机传输写法 rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt #rsync的远程传输rsync格式rsync [OPTION] … SRC ......

林怡丰
今天
3
0
GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238

GatewayWorker 报错:stream_socket_server(): unable to connect to tcp://0.0.0.0:1238 (Address already in use) 官方文档虽然有相同的问题,但是对我的问题没起作用…… 后面发现自己手贱...

wenzhizhong
昨天
3
0
REST接口

文章来源 https://zhuanlan.zhihu.com/p/28674721?group_id=886181549958119424 http://www.ruanyifeng.com/blog/2014/05/restful_api.html REST 对请求的约定 REST 用来规范应用如何在 HTTP......

Airship
昨天
5
0
Spring Cloud Config 统一配置中心

Spring Cloud Config 统一配置中心 一、统一配置中心 统一管理配置 通常,我们会使用配置文件来管理应用的配置。如一个 Spring Boot 的应用,可以将配置信息放在 application.yml 文件中,如...

非摩尔根
昨天
6
0
android ------ AAPT2 error: check logs for details解决方法

AAPT 是全称是 Android Asset Packaging Tool,它是构建 App,甚至是构建 Android 系统都必不可少的一个工具。它的作用是将所有资源文件压缩打包到Android APK 当中。我们在 Android SDK 目录...

切切歆语
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部