/**
 * Created by 1000132937 on 3/29/2018.
 */
public class ReverseHtml {

        public String reverseHtml2(String html) {
            if(html == null || html.length() < 2){
                return html;
            }
            int len = html.length();
            char[] htmlArr = html.toCharArray();
            reverseChar(htmlArr,0,len -1);
            int left = 0;
            while(left < len){
                if(htmlArr[left] != ';'){
                    left++;
                }else {
                    int right = left+1;
                    if(right >= len -1){
                        break;
                    }
                    while(htmlArr[right] != '&'){
                        if(htmlArr[right] == ';'){
                            left = right;
                        }
                        right++;
                    }
                    reverseChar(htmlArr,left,right);
                    left = right+1;
                }
            }
            return new String(htmlArr);
        }
        private void reverseChar(char[] chars,int start,int end){
            while(start < end) {
                char temp = chars[start];
                chars[start++] = chars[end];
                chars[end--] = temp;
            }
        }
        public static void main(String[] args) {
            ReverseHtml sol = new ReverseHtml();

            String s = "1234&eur;o;5677&&eu;567&";
// String s = "&euro4321";
            System.out.println(sol.reverseHtml2(s));
            System.out.println(sol.reverseHtml(s));
        }

        public String reverseHtml(String html) {
            if(html == null || html.length()==0) {
                return null;
            }
            int len = html.length();
            // convert to char array, reverse the whole array
            char[] chArr = html.toCharArray();
            reverseChar(chArr,0,len-1);
            int start = 0;
            int end = 0;

            // reverse each word that start with ";" and end with "&"
            while(end < len){
                if(chArr[end] == ';'){
                    start = end;
                }else if(chArr[end] == '&'){
                    if(chArr[start] == ';') {
                        reverseChar(chArr, start, end);
                    }
                    start = end+1;
                }
                end++;

            }
            return new String(chArr);
        }

}

results matching ""

    No results matching ""