字符串之替换字符串中连续出现的指定字符串
给定3个字符串str from to已知from字符串无重复字符,把str中所有from的子串全都替换成to字符串,连续出现from只需要换成一个to就可。
str="123" from = "adc" to ="4567" 返回123
str="123adcabc" from = "adc" to ="X" 返回123X
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 package com.chenyu.string.cn; public class RaplaceString { public static void main(String[] args) { String target = "000abcabc123abc456abc789abcabc" ; String from = "abc" ; String to = "def" ; String result = replace(target, from ,to); System.out.print( "result:" + result); } public static String replace(String target, String from, String to) { if (target == null || "" .equals(target) || from == null || "" .equals(from) || to == null ) { return null ; } char [] targetChars = target.toCharArray(); char [] fromChars = from.toCharArray(); int count = 0 ; for ( int i = 0 ; i < targetChars.length; i++) { if (targetChars[i] == fromChars[count++]) { if (count == from.length()) { changeToZero(targetChars, count, i); count = 0 ; } } else { count = 0 ; } } String res = "" ; for ( int i = 0 ; i < targetChars.length; i++) { if (targetChars[i] != 0 ) { res = res + String.valueOf(targetChars[i]); } if (targetChars[i] == 0 && (i == 0 || targetChars[i- 1 ] != 0 )){ res = res + to; }连续出现的指定字符串 } return res; } public static void changeToZero( char [] chars, int count, int end) { while (count-- != 0 ) { //or while ((count--) > 0) chars[end--] = 0 ; //如果char a = 0,就是把ASCII为0给a,如果char a = 'a',就是把ASCII为48给a } } }
