发布于 2014-10-20 06:15:51 | 517 次阅读 | 评论: 0 | 来源: 网友投递
去哪儿网
去哪儿网(Qunar.com)总部位于北京,于2005年5月,由庄辰超与戴福瑞(Fritz Demopoulos)、道格拉斯(Douglas Khoo)共同创立。作为中国第一个旅游搜索引擎,使中国旅行者首次能够在线比较国内航班和酒店的价格及服务。
1、String padString(String string,int minLength,char padChar);
就是在string前用padChar把string填充到至少minLength长度
如("7",3'0'),得到的结果是"007";
如("2012",3,'0'),的到的结果是"2012”;
minLength可能是负数
public static void main(String[] args) {
System.out.println(padString("7", 3, '0'));
System.out.println(padString("2012", 3, '0'));
}
static String padString(String string,int minLength,char padChar){
int len = string.length();
if(minLength<0 || minLength<len){
return string;
}
StringBuffer sb = new StringBuffer();
int pads = minLength - len;
while(pads-->0){
sb.append(padChar);
}
sb.append(string);
return sb.toString();
}
2、命令解析
对于命令
-name jack -age 20 -address "HangZhou ZheDa Road"
要变成[-name jack, -age 20, -address "HangZhou ZheDa Road"]
命令由参数和值对组成,参数以-开头,参数和值之间,值和值之间都是用空格隔开,
双引号""之间的值当做一个整体
来处理。所有参数和值只包括英文字母,数字,减号和双引号
public static void main(String[] args) {
System.out.println(parser("-name jack -age 20 -address \"HangZhou ZheDa Road\""));
System.out.println(parser(" -name jack -age 20 -address \"HangZhou ZheDa Road\""));
System.out.println(parser("-name jack -age 20 -address \"HangZhou ZheDa Road\""));
System.out.println(parser("-name jack -age 20 -address \"HangZhou ZheDa Road \" "));
}
static String parser(String str){
String params[] = str.split("-");
for(int i=0;i<params.length;i++){
params[i]=params[i].trim();//去掉前后空格
params[i]=params[i].replaceAll("\\s+", " ");//去掉中间空格
}
StringBuffer sb = new StringBuffer();
sb.append("[");
for(int i=0;i<params.length;i++){
if(params[i].length()!=0 && !params[i].equals("")){
sb.append("-");
sb.append(params[i]);
if(i!=params.length-1){
sb.append(", ");
}
}
}
sb.append("]");
return sb.toString();
}
3,dif(String str1,String str2);
输出两个字符串中不同的的字符,如果字符a在str1中出现,而没有在str2当中出现,则输出-a.相反,则输出+a; 字符串当中重复的子字符串不输出。<br>
abcde,bcde 输出-a <br>
dabc, aabcef 输出+a,-d,+e,+f <br>
abcdefe,aabcadef输出+a,+a,-e;
思路:把26个字母映射成一个26大小的整数数组flag,初始全为0,a对应flag[0],如果在str2中出现,则加1,如果在str1中出现,则减1,
最后遍历这个数组,打印出现的次数即可。
public static void main(String[] args) {
System.out.println(dif("abcde","bcde"));
System.out.println(dif("dabc","aabcef"));
System.out.println(dif("abcdefe","aabcadef"));
}
static String dif(String str1, String str2) {
int flag[] = new int[26];
StringBuffer sb = new StringBuffer();
str1 = str1.toLowerCase().trim();
str2 = str2.toLowerCase().trim();
for(int i=0;i<str1.length();i++){
flag[str1.charAt(i)-'a']--;
}
for(int i=0;i<str2.length();i++){
flag[str2.charAt(i)-'a']++;
}
for(int i=0;i<flag.length;i++){
// System.out.println("flag["+i+"]="+flag[i]);
if(flag[i]<0){
int count = Math.abs(flag[i]);
for(int j=0;j<count;j++){
sb.append("-");
sb.append((char)(i+'a'));
sb.append(",");
}
}else if(flag[i]>0){
for(int j=0;j<flag[i];j++){
sb.append("+");
sb.append((char)(i+'a'));
sb.append(",");
}
}
}
if(sb.lastIndexOf(",")==sb.length()-1)
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}