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 = 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("[email protected]@[email protected]@[email protected]", "@@", " "); 53 System.out.println(s); 54 }
时间: 2024-11-12 02:18:08