模拟Excel中SUBSTITUTE函数
Excel中的SUBSTITUTE是一个很有用的字符串替换函数,其说明如下:
说明
在文本字符串中用 new_text 替换 old_text。 如果需要在某一文本字符串中替换指定的文本,请使用函数 SUBSTITUTE;如果需要在某一文本字符串中替换特定位置处的任意文本,请使用函数 REPLACE。
语法
SUBSTITUTE(text, old_text, new_text, [instance_num])
SUBSTITUTE 函数语法具有下列参数:
文本 必需。 需要替换其中字符的文本,或对含有文本(需要替换其中字符)的单元格的引用。
old_text 必需。 需要替换的文本。
new_text 必需。 用于替换 old_text 的文本。
Instance_num 可选。 指定要用 new_text 替换 old_text 的事件。 如果指定了 instance_num,则只有满足要求的 old_text 被替换。 否则,文本中出现的所有 old_text 都会更改为 new_text。
Java实现:
public static String substitute(String src, String oldText, String newText,
int... instancePositions) {
/*
* 由于直接使用split方法会涉及正则表达式, 但无法确认oldText中是否含有正则表达式的元字符,
* 如:[]^$|等,因此先获取动态的分割符, 将oldText用replace方法(此方法不涉及正则表达式)替换为获取到的分隔符
*/
String splitStr = getSplitStr(src);
// System.out.println(splitStr);
String dealSrc = src.replace(oldText, splitStr);
// 使用获取到的分隔符分割
String[] splitArr = dealSrc.split(splitStr);
int arrLen = splitArr.length;
StringBuffer sbf = new StringBuffer();
for (int i = 0; i < arrLen; i++) {
boolean needReplace = needReplace(i, instancePositions);
if (needReplace && i != 0) {
sbf.append(newText);
} else {
sbf.append(oldText);
}
sbf.append(splitArr[i]);
}
return sbf.toString().substring(oldText.length());
}
private static String getSplitStr(String src) {
StringBuilder sbd = new StringBuilder();
boolean contains = false;
do {
sbd.append("@");
contains = src.contains(sbd);
} while (contains);
return sbd.toString();
}
private static boolean needReplace(int num, int[] nums) {
boolean needReplace = false;
// 当未输入需要替换的位置时,默认全部替换,因此直接返回true
if (nums.length == 0) {
return true;
}
for (int i = 0; i < nums.length; i++) {
if (num == nums[i]) {
needReplace = true;
break;
}
}
return needReplace;
}
public static void main(String[] args) {
String s = substitute("yan@@tian@i@love@u", "@@", " ");
System.out.println(s);
}
模拟Excel中SUBSTITUTE函数的更多相关文章
- Excel中COUNTIFS函数统计词频个数出现次数
Excel中COUNTIFS函数统计词频个数出现次数 在Excel中经常需要实现如下需求:在某一列单元格中有不同的词语,有些词语相同,有的不同(如图1所示).需要统计Excel表格中每个词语出现的 ...
- [VBA]用一个简单例子说明如何在Excel中自定义函数
Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...
- Excel中choose函数的使用方法
你还在为Excel中choose函数的使用方法而苦恼吗,今天小编教你Excel中choose函数的使用方法,让你告别Excel中choose函数的使用方法的烦恼. 经验主要从四方面对Excel函数进行 ...
- Excel中Sumproduct函数的使用方法
1.sumproduct函数的含义 1 1.Sumproduct函数的适用范围,在给定的几组数组中,然后把数组间对应的元素相乘,最后返回乘积之和. 从字面上可以看出,sumproduct有两个英文单词 ...
- Excel中concatenate函数的使用方法
你还在为Excel中concatenate函数的使用方法而苦恼吗,今天小编教你Excel中concatenate函数的使用方法,让你告别Excel中concatenate函数的使用方法的烦恼. 经验主 ...
- Excel中IF函数的嵌套用法(多条件)
Excel中IF函数的嵌套用法(多条件) Excel中IF函数的嵌套用法(多条件) 函数格式:if(logical_test,value_if_true,value_if_false).其中: ...
- Excel中countif函数的使用方法
1.countif函数的含义 在指定区域中按指定条件对单元格进行计数(单条件计数) 建议和countifs函数结合起来学习,可以观看小编的经验Excel中countifs函数的使用方法. END 2. ...
- Excel中MATCH函数的正确使用
Excel中MATCH函数是一个很强大的辅助函数, MATCH函数语法为:MATCH(lookup_value,lookuparray,match-type) lookup_value:表示查询的指定 ...
- 【图文】Excel中vlookup函数的使用方法
今天统计数据,用到了Excel中vlookup函数,第一次使用当然少不了百度,经过反复研究后,算是解决了问题,现整理成文档. 一.实现效果 Sheet1 Sheet2 注:上图中sheet1商品条 ...
随机推荐
- 搭建MAC下vim环境
MAC下的IDE实在是不好用,最终放弃了IDE准备直接用vim来看代码了,那么就需要设置一下vim. 将家目录下面.vim中的vimrc用下面的内容替换: " Set vundle sett ...
- Cortex-A
本文整理了arm cortexA 系列的CPU的相关信息,以便在芯片选型时提供帮助. Cortex-A发布时间 Cortex-A 支持的位数及架构 Cortex-A 系列的芯片 ARMv7-A内核的比 ...
- cocos2d-x Schedule详解
原理介绍 Cocos2d-x调度器为游戏提供定时事件和定时调用服务.所有Node对象都知道如何调度和取消调度事件,使用调度器有几个好处: 每当Node不再可见或已从场景中移除时,调度器会停止. Coc ...
- 简单好用的hash表-----uthash
在软件开发中,不可不免的会使用到hash表,hash表的优点这里就不说了,以下介绍一个hash表的C实现, uthash是用宏实现的,使用的时候非常方便,只用包含uthash.h即可. Uthash的 ...
- django:DateTimeField如何自动设置为当前时间并且能被修改 ——django日期时间字段的使用
创建django的model时,有DateTimeField.DateField和TimeField三种类型可以用来创建日期字段,其值分别对应着datetime().date().time()三中对象 ...
- HttpClient 教程 (四)
第四章 HTTP认证 HttpClient提供对由HTTP标准规范定义的认证模式的完全支持.HttpClient的认证框架可以扩展支持非标准的认证模式,比如NTLM和SPNEGO. 4.1 用户凭证 ...
- Ubuntu下如何解压缩zip,tar,tar.gz,tar.bz2文件
转自:http://wangli-5665.diandian.com/post/2011-08-18/4039228 这么多年来,数据压缩对我们来说是非常有用的.无论是在邮件中发送的图片用的zip文件 ...
- HDS(日立)AMS2000系列存储管理配置方法
转自:老管网络日志 配置日立存储AMS2000系列时也要和IBM存储一样,首先在客户端或者管理机上安装一个客户端,通过这个客户端再去管理存储. 管理软件名称为Storage Navigator Mod ...
- JavaEE各种Javadoc的下载
刚才突然发现,很多servlet的api都不熟悉,但是又没有给eclipse导入api,就google了一下 关键字,servlet api / doc 或者java ee api / doc 注意版 ...
- 【Unity/Kinect】显示Kinect摄像头内容,屏幕显示环境背景及人体投影
最近学习用Unity做些体感小游戏,使用Kinect的Unity插件,结合一些官方Demo学习(网上资源用Unity做的较少,蛋疼).插件及其Demo就在Unity商店里搜Kinect即可找到,其中下 ...