当前位置: 代码迷 >> Java相关 >> java字符串操作,求答案!该如何解决
  详细解决方案

java字符串操作,求答案!该如何解决

热度:89   发布时间:2016-04-22 20:58:14.0
java字符串操作,求答案!


今天去某公司面试java开发,面试官给出的一道机试题,求高手支招啊!小生感激不尽!
------解决思路----------------------
public class StringUtil {

// 判断字符是否为 大于0的字符
private static boolean isNumber(char c) {
if (c > '0' && c <= '9') {
return true;
}
return false;
}

public static String encode(String str) {
char[] dst = new char[str.length()];
str.getChars(0, str.length(), dst, 0);

StringBuffer sb = new StringBuffer();
for (int i = 0; i < dst.length - 1; i++) {
if (isNumber(dst[i])) {
int j = Integer.parseInt(String.valueOf(dst[i]));
for (int k = 0; k <= j; k++) {
sb.append(dst[i + 1]);
}
} else if (dst[i] == '_') {
sb.append("\\UL");
} else {
sb.append(dst[i]);
}
sb.append('_');
}
sb.append(dst[dst.length - 1]);

return sb.toString();

}

// --------------------------------------------------------------------------
// 判断长度大于1的字符串,其里面的每一个字符是否相同
public static boolean isSame(String str) {
byte[] b = str.getBytes();
for (int i = 0; i < b.length - 1; i++) {
if (b[i] != b[i + 1]) {
return false;
}
}
return true;
}

public static String decode(String str) {
String[] strs = str.split("_");
StringBuffer sb = new StringBuffer();

for(int i=0;i<strs.length-1;i++){
if(strs[i].length()==1){
sb.append(strs[i]);
}
else if("\\UL".equals(strs[i])){
sb.append("_");
}
else if(isSame(strs[i])){
sb.append(strs[i].getBytes().length-1+"");
}
else{
new RuntimeException("输入的字符串没有经过encode()处理的");
}
}
sb.append(strs[strs.length-1]);
return sb.toString();
}
}
------解决思路----------------------
感觉是一个简单的加密解密程序。
public class Demo36 {

public final char APPEND_CHAR = '_';

public static void main(String[] args) {
String s = "24ab_2t20";
Demo36 demo = new Demo36();
String desc = demo.encode(s);
System.out.println("encode result is: " + desc);
System.out.println("decode result is: " + demo.decode(desc));
}

public String encode(String s) {
char[] cs = s.toCharArray(), rcs = new char[cs.length << 1];
int index = 0;
for (int i = 0; i < cs.length; i++) {
char c = cs[i];
if ((index > rcs.length - 10) && (i < cs.length - 1)) {
char[] _rcs = new char[rcs.length + (cs.length - i) << 1];
System.arraycopy(rcs, 0, _rcs, 0, index);
rcs = _rcs;
}
switch (getType(c, i == cs.length - 1)) {
case '1': {
for (char a = '0'; a < c + 1; a++) {
rcs[index++] = cs[i+1];
}
break;
}
case '0': {
rcs[index++] = c;
break;
}
default: {
rcs[index++] = '\\';
rcs[index++] = 'U';
rcs[index++] = 'L';
break;
}
}

if (i < cs.length - 1) {
rcs[index++] = APPEND_CHAR;
}
}
return new String(rcs, 0, index);
}

private char getType(char c, boolean end) {
char t;
if (c > 48 && c <= 58 && !end)
t = '1';
else if (c == APPEND_CHAR)
t = c;
else
t = '0';
return t;
}

public String decode(String s) {
String[] sc = s.split("_");
char[] cs = new char[sc.length];
for (int i = 0; i < sc.length; i++) {
String sub = sc[i];
if ("\\UL".equals(sub)) {
cs[i] = '_';
} else if (sub.length() > 1) {
cs[i] = (char) ('0' + (sub.length() - 1));
} else {
cs[i] = sub.charAt(0);
}
}
return new String(cs);
}
}
  相关解决方案