首页 > 代码库 > (华为)按照指定规则对输入的字符串进行处理

(华为)按照指定规则对输入的字符串进行处理

问题详细描述:将输入的两个字符串合并。

对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。

对排训后的字符串进行操作,如果字符为‘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 }