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. [Jobdu] 题目1370:数组中出现次数超过一半的数字

    题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2 ...

  2. JS动态增加删除UL节点LI

    JS如何动态增加删除UL节点LI及相关内容. <ul id="ul"> <li id=1>11111111111111111<a href=" ...

  3. 第九章 搭建Hadoop 2.2.0版本HDFS的HA配置

    Hadoop中的NameNode好比是人的心脏,非常重要,绝对不可以停止工作.在hadoop1时代,只有一个NameNode.如果该NameNode数据丢失或者不能工作,那么整个集群就不能恢复了.这是 ...

  4. Spark的任务调度

    本文尝试从源码层面梳理Spark在任务调度与资源分配上的做法. 先从Executor和SchedulerBackend说起.Executor是真正执行任务的进程,本身拥有若干cpu和内存,可以执行以线 ...

  5. 关于 \t 水平制表符 Horizontal Tab (TAB)

    今天在学learn python the hard way ex26修改的时候,有一个关于\t的问题,下面分别为代码以及输出结果: 1 poem = """ 2 \tTh ...

  6. java 多线程阻塞队列 与 阻塞方法与和非阻塞方法

    Queue是什么 队列,是一种数据结构.除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的.无论使用哪种排序方式,队列的头都是调用remove()或poll()移 ...

  7. IWDG—独立看门狗

    本章参考资料:<STM32F4XX 中文参考手册> IWDG 章节.学习本章时,配合<STM32F4XX 中文参考手册> IWDG 章节一起阅读,效果会更佳,特别是涉及到寄存器 ...

  8. RabbitMQ(二):mandatory标志的作用

    本文转自:http://m.blog.csdn.net/article/details?id=54311277 在生产者通过channel的basicPublish方法发布消息时,通常有几个参数需要设 ...

  9. 设计模式-观察者模式(下)<转>

    观察者模式在Java中有两种实现方式,上文是一种方式,这种方式是自己写代码实现. 另一种方式是使用Java内置的观察者模式来实现.   相关的接口和类如下: java.util.Observable  ...

  10. PHP——初学,基础

    代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...