首页 > 代码库 > (华为)按照指定规则对输入的字符串进行处理
(华为)按照指定规则对输入的字符串进行处理
问题详细描述:将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排训后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’;
如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。
举例:输入str1为"dec",str2为"fab",合并为“decfab”,分别对“dca”和“efb”进行排序,排序后为“abcedf”,转换后为“5D37BF”
接口设计及说明:
/*功能:字符串处理
输入:两个字符串,需要异常处理
输出:合并处理后的字符串,具体要求参考文档
返回:无*/
暂时先就这么实现吧,应该有更好的办法,进制变换没有琢磨到好的办法,有大神看到了求指导 。
以前喜欢在有道云自己写私密随笔,不过技术还是要交流,第一篇文章
1 /** 2 * @(#)ProcessChar.java 3 * 4 * ProcessChar application 5 * 6 * @author 7 * @version 1.00 2014/6/7 8 */ 9 import java.util.*; 10 public class ProcessString { 11 12 public static void main(String[] args) { 13 // TODO, add your application code 14 String strout=""; 15 processString("cad","bef",strout); 16 //System.out.println(reverseBinary("1011")); 17 18 19 20 } 21 static void processString(String str1,String str2,String strOutput) { 22 String strs=str1+str2; 23 char [] chs=strs.toCharArray(); 24 int len1=(chs.length%2==0)?(chs.length/2):(chs.length/2+1); 25 int len2=chs.length-len1; 26 char [] ch1=new char[len1]; 27 char[] ch2=new char[len2]; 28 for(int i=0,n=0,m=0;i<chs.length;i++){ 29 if(i%2==0){ 30 ch1[m++]=chs[i]; 31 }else{ 32 ch2[n++]=chs[i]; 33 } 34 } 35 //分别对ch1,ch2中的字符排序 36 quikSort(ch1,0,len1-1); 37 quikSort(ch2,0,len2-1); 38 //合并两个字符数组 39 for (int i = 0,m=0,n=0; i<chs.length; i++){ 40 if(i%2==0){ 41 chs[i]=ch1[m]; 42 m++; 43 }else if(n<len2&&i%2!=0){ 44 chs[i]=ch2[n]; 45 n++; 46 }else if(m<len1){ 47 chs[i]=ch1[m]; 48 m++; 49 } 50 } 51 Map<String,String > numorchar=new HashMap<String,String>(); 52 numorchar.put("A","1010");numorchar.put("B","1011"); 53 numorchar.put("C","1100");numorchar.put("D","1101"); 54 numorchar.put("E","1110");numorchar.put("F","1111"); 55 numorchar.put("1010","A");numorchar.put("1011","B"); 56 numorchar.put("1100","C");numorchar.put("1101","D"); 57 numorchar.put("1110","E");numorchar.put("1111","F"); 58 59 //进制变换 60 for (int i = 0; i<chs.length; i++){ 61 if((chs[i]>=‘0‘&&chs[i]<=‘9‘)|| (chs[i]>=‘A‘&&chs[i]<=‘F‘)||(chs[i]>=‘a‘&&chs[i]<=‘f‘)){ 62 if(chs[i]>=‘0‘&&chs[i]<=‘9‘){ 63 String s= Integer.toBinaryString(Integer.parseInt(String.valueOf(chs[i]))); 64 String s_rev=reverseBinary(s); 65 int num=Integer.parseInt(s_rev,2); 66 if(num>9){ 67 chs[i]=numorchar.get(s_rev).charAt(0); 68 }else{ 69 chs[i]=(num+"").charAt(0); 70 } 71 }else if(chs[i]>=‘a‘&&chs[i]<=‘f‘){ 72 String s=chs[i]+""; 73 String s_rev=reverseBinary(numorchar.get(s.toUpperCase())); 74 int num=Integer.parseInt(s_rev,2); 75 if(num>9){ 76 chs[i]=numorchar.get(s_rev).charAt(0); 77 }else{ 78 chs[i]=(num+"").charAt(0); 79 } 80 81 }else{ 82 String s_rev=reverseBinary(numorchar.get(chs[i]+"")); 83 int num=Integer.parseInt(s_rev,2); 84 if(num>9){ 85 chs[i]=numorchar.get(s_rev).charAt(0); 86 }else{ 87 chs[i]=(num+"").charAt(0); 88 } 89 } 90 91 } 92 93 } 94 strOutput=new String(chs); 95 System.out.println(strOutput); 96 } 97 static String reverseBinary(String s){ 98 String str=""; 99 for (int i = 0; i < s.length(); i++) { 100 str=""+str+s.charAt(s.length()-i-1); 101 } 102 return str; 103 } 104 static void quikSort(char k[],int low,int high){ 105 int point; 106 if(low<high){ 107 point=patitionNumber(k,low,high); 108 quikSort(k,low,point-1); 109 quikSort(k,point+1,high); 110 } 111 } 112 static int patitionNumber(char k[],int low,int high){ 113 char key=k[low]; 114 while(low<high){ 115 while((low<high)&&k[high]>=key) 116 --high; 117 118 char temp=k[high]; 119 k[high]=k[low]; 120 k[low]=temp; 121 while((low<high)&&k[low]<=key) 122 ++low; 123 124 temp=k[low]; 125 k[low]=k[high]; 126 k[high]=temp; 127 } 128 return low; 129 } 130 131 //打印输出字符数组 132 static void printChar(char [] ch){ 133 int len=ch.length; 134 for(int i=0;i<len;i++){ 135 System.out.print(ch[i]); 136 } 137 System.out.println(); 138 } 139 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。