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函数的更多相关文章

  1. Excel中COUNTIFS函数统计词频个数出现次数

    Excel中COUNTIFS函数统计词频个数出现次数   在Excel中经常需要实现如下需求:在某一列单元格中有不同的词语,有些词语相同,有的不同(如图1所示).需要统计Excel表格中每个词语出现的 ...

  2. [VBA]用一个简单例子说明如何在Excel中自定义函数

    Excel中的函数无疑是强大的,但是再强大的战士也有他脆弱的脚后跟[1].这两天在使用Excel的时候遇到了一个需求,要在某一个单元格里面自动计算今天是星期几(如显示 Today is Tuesday ...

  3. Excel中choose函数的使用方法

    你还在为Excel中choose函数的使用方法而苦恼吗,今天小编教你Excel中choose函数的使用方法,让你告别Excel中choose函数的使用方法的烦恼. 经验主要从四方面对Excel函数进行 ...

  4. Excel中Sumproduct函数的使用方法

    1.sumproduct函数的含义 1 1.Sumproduct函数的适用范围,在给定的几组数组中,然后把数组间对应的元素相乘,最后返回乘积之和. 从字面上可以看出,sumproduct有两个英文单词 ...

  5. Excel中concatenate函数的使用方法

    你还在为Excel中concatenate函数的使用方法而苦恼吗,今天小编教你Excel中concatenate函数的使用方法,让你告别Excel中concatenate函数的使用方法的烦恼. 经验主 ...

  6. Excel中IF函数的嵌套用法(多条件)

    Excel中IF函数的嵌套用法(多条件)   Excel中IF函数的嵌套用法(多条件)   函数格式:if(logical_test,value_if_true,value_if_false).其中: ...

  7. Excel中countif函数的使用方法

    1.countif函数的含义 在指定区域中按指定条件对单元格进行计数(单条件计数) 建议和countifs函数结合起来学习,可以观看小编的经验Excel中countifs函数的使用方法. END 2. ...

  8. Excel中MATCH函数的正确使用

    Excel中MATCH函数是一个很强大的辅助函数, MATCH函数语法为:MATCH(lookup_value,lookuparray,match-type) lookup_value:表示查询的指定 ...

  9. 【图文】Excel中vlookup函数的使用方法

    今天统计数据,用到了Excel中vlookup函数,第一次使用当然少不了百度,经过反复研究后,算是解决了问题,现整理成文档. 一.实现效果 Sheet1 Sheet2   注:上图中sheet1商品条 ...

随机推荐

  1. 将ip地址转换成C段地址的UDF

    将ip地址转换成C段地址的UDF,最重要的是判断IP地址的正则表达式. package cn.cnnic.ops.Study; import java.util.regex.Pattern; impo ...

  2. jave web 开发中 遇到修改不生效的几部方法 总结

    在web开发中经常遇到修改文件之后没有正确被加载的情况  1.重启服务器 2.结束多余 javaw.exe 进程 3.删除web容器下的缓存文件  work 4. ctrl+f5 强制刷新缓存,如果是 ...

  3. RTX——第17章 定时器组

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 RTX 支持的定时器组,或者叫软件定时器,或者叫用户定时器均可.软件定时器的功能比较简 ...

  4. VBA学习笔记(4)--数组和单元格互相转换

    说明(2017.3.23): 1. VBA的数组还是很难用的,其实就是非常难用! 2. 要先定义一个数组,可以是空的,也可以里面写个数字作为数组长度. 3. 如果是空数组,可以后面redim重新定义数 ...

  5. perl ExtUtils::Manifest

    Can't locate ExtUtils/Manifest.pm in @INC (you may need to install the ExtUtils::Manifest module) yu ...

  6. 找你妹+ipad+wifi,回顾那年的经典游戏

    昨天,不是从前天同事拿平板给我后,就没睡过一个安稳觉. 先是看电视看得爽歪了,再就是昨天晚上的游戏之夜.IPAD比較老.连系统都不好更新了.就用了留存的应用. 打开酷我看看有什么音乐推荐,听到一首&l ...

  7. centos 7 上配置mysql 开机启动详解

    之前多次在centos7环境下配置mysql开机自启动出现了错误.现留下篇文章已做记录 一.centos7与centos6相比有什么不同: 1 在centos7中服务不在是用service这个命令来启 ...

  8. Android——用对话框做登陆界面(自定义对话框AlertDialog,多线程,进度条ProgressDialog,ListView,GridView,SharedPreferences存,读数据,存取文本,assets文件)

    效果: 1.点击图标进入页面二 2.页面2图片暂停显示5秒进入页面三 3.点击页面三登陆按钮,打开登陆对话框,输入密码进入页面四 点击下载按钮,显示水平进度条 点击保存和获取用户名和密码 进入页面六  ...

  9. dvi 中的内容居中

    text-align:right;  文本居中 line-height:35px;*垂直居中*

  10. esayUI实践的一些体会

    1.如何在页面中使用 easy ui ? 引入 四个文件 <!-- 引入easy ui --> <link rel="stylesheet" type=" ...