常用算法

2019-08-04-字符串操作

2019-08-06  本文已影响0人  王元

一,题目:替换字符串中的空格

实现方式1:

public static String replaceBlack(String s) {
    final int len = s == null ? 0 : s.length();
    if(len <= 0) {
        return s;
    }
    int blackNum = 0;
    char[] arr = s.toCharArray();
    for(int  i = 0; i < len; i++) {
        if(arr[i] == ' ') {
            blackNum++;
        }
    }
    int replaceNum = len + blackNum * 2;
    int originLen = len;
    char[] replaceArr = new char[replaceNum];
    while(originLen > 0) {
        --originLen;
        if(arr[originLen] == ' ') {
            replaceArr[--replaceNum] = '0';
            replaceArr[--replaceNum] = '2';
            replaceArr[--replaceNum] = '%';
            
        } else {
            
            replaceArr[--replaceNum] = arr[originLen];
        }
        
    }
        
    return new String(replaceArr);
}

代码实现方式2

public static String replaceSpace(String str) {
    final int len = str == null ? 0 : str.length();
    int spaceNum = 0;
    for (int i = 0; i < len; i++) {
        char c = str.charAt(i);
        if(c == ' ') {
            spaceNum++;
        }
    }
    if(spaceNum <= 0) {
        return str;
    }

    int newLen = len + spaceNum * 2;
    char[] chars = new char[newLen];

    int newIndex = newLen - 1;
    int oldIndex = len - 1;

    while (oldIndex >= 0) {
        char c = str.charAt(oldIndex);
        if(c == ' ') {
            chars[newIndex--] = '0';
            chars[newIndex--] = '2';
            chars[newIndex--] = '%';
        } else {
            chars[newIndex--] = c;
        }
        oldIndex--;

    }
    return new String(chars);
}

二,反转字符串

1,代码实现,按照空格调整顺序

private static void reverse() {
    String[] arr = VALUE.split(" ");
    final int len = arr == null ? 0 : arr.length;
    StringBuilder sb = new StringBuilder();
    for(int i = len -1; i >=0; i--) {
        if(i < len -1) {
            sb.append(" ");
        }
        sb.append(arr[i]);
    }
    System.out.println(sb.toString());
}
    
public static void reverse1() {
    String[] arr = VALUE.split(" ");
    final int len = arr == null ? 0 : arr.length;
    int start = 0;
    int end = len - 1;
    
    while(start < end) {
        String temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        start++;
        end--;
    }
    for(String s : arr) {
        System.out.println(s + " ");
    }
}

2,转为char,然后使用异或来实现,待验证,

public static void reverse2() {
    char[] arr = VALUE.toCharArray();
    final int len = arr == null ? 0 : arr.length;
    int start = 0;
    int end = len - 1;
    
    while(start < end) {
        arr[start] = (char)(arr[start] ^ arr[end]);
        arr[end] = (char)(arr[start] ^ arr[end]);
        arr[start] = (char)(arr[end] ^ arr[start]);
        start++;
        end--;
    }
    for(char s : arr) {
        System.out.print(s);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读