首页 > 代码库 > 模拟Excel中SUBSTITUTE函数
模拟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实现:
1 public static String substitute(String src, String oldText, String newText, 2 int... instancePositions) { 3 /* 4 * 由于直接使用split方法会涉及正则表达式, 但无法确认oldText中是否含有正则表达式的元字符, 5 * 如:[]^$|等,因此先获取动态的分割符, 将oldText用replace方法(此方法不涉及正则表达式)替换为获取到的分隔符 6 */ 7 String splitStr = getSplitStr(src); 8 // System.out.println(splitStr); 9 String dealSrc =http://www.mamicode.com/ src.replace(oldText, splitStr); 10 // 使用获取到的分隔符分割 11 String[] splitArr = dealSrc.split(splitStr); 12 int arrLen = splitArr.length; 13 StringBuffer sbf = new StringBuffer(); 14 for (int i = 0; i < arrLen; i++) { 15 boolean needReplace = needReplace(i, instancePositions); 16 if (needReplace && i != 0) { 17 sbf.append(newText); 18 } else { 19 sbf.append(oldText); 20 } 21 sbf.append(splitArr[i]); 22 } 23 return sbf.toString().substring(oldText.length()); 24 } 25 26 private static String getSplitStr(String src) { 27 StringBuilder sbd = new StringBuilder(); 28 boolean contains = false; 29 do { 30 sbd.append("@"); 31 contains = src.contains(sbd); 32 } while (contains); 33 return sbd.toString(); 34 } 35 36 private static boolean needReplace(int num, int[] nums) { 37 boolean needReplace = false; 38 // 当未输入需要替换的位置时,默认全部替换,因此直接返回true 39 if (nums.length == 0) { 40 return true; 41 } 42 for (int i = 0; i < nums.length; i++) { 43 if (num == nums[i]) { 44 needReplace = true; 45 break; 46 } 47 } 48 return needReplace; 49 } 50 51 public static void main(String[] args) { 52 String s = substitute("yan@@tian@i@love@u", "@@", " "); 53 System.out.println(s); 54 }
模拟Excel中SUBSTITUTE函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。