天地无极,乾坤剑法

导航

 

题目描述

按照指定规则对输入的字符串进行处理。

详细描述:

将输入的两个字符串合并。

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

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

接口设计及说明:

/*

功能:字符串处理

输入:两个字符串,需要异常处理

输出:合并处理后的字符串,具体要求参考文档

返回:无

*/

void ProcessString(char* str1,char *str2,char * strOutput)

{

}

 

 

输入描述:

输入两个字符串

输出描述:

输出转化后的结果

示例1

输入

dec fab

输出

5D37BF

代码如下:

package com.yzh.hehe;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class StringMerge1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner=new Scanner(System.in);
        while (scanner.hasNext()) {
            String str1=scanner.next();
            String str2=scanner.next();
            ProcessString(str1, str2);
        }
        scanner.close();

    }
    
     public  static void ProcessString(String str1,String str2 ) {
         StringBuilder stringBuilder=new StringBuilder(str1+str2);
         List<Character>jiList=new ArrayList<Character>();
         List<Character>ouList=new ArrayList<Character>();
         int length=stringBuilder.length();
          //将奇数偶数下标位置的字符分开
         for (int i = 0; i < length; i++) {
            if (i%2==0) {
                jiList.add(stringBuilder.charAt(i));
            }else {
                ouList.add(stringBuilder.charAt(i));
            }
        }
         //对奇偶字符串排序
         Collections.sort(jiList);
         Collections.sort(ouList);
         
//         Character[]cjiArr={};
//         cjiArr= jiList.toArray( cjiArr);
//         Character[]couArr={};
//         couArr=ouList.toArray(couArr);
//         Arrays.sort(cjiArr);
//         Arrays.sort(couArr);
         stringBuilder.delete(0, stringBuilder.length());//删除整个stringBuilder
         int ouSize=ouList.size();
         //再合并奇偶字符串
         for(int i=0;i<ouSize;i++){
             stringBuilder.append(jiList.get(i));
             stringBuilder.append(ouList.get(i));
         }
         if (jiList.size()>ouSize) {
            stringBuilder.append(jiList.get(ouSize));
        }
         Object[] oArr={0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F'};//根据值和数组下标进行数组映射
         for (int i = 0; i < length; i++) {
             Character temp=stringBuilder.charAt(i); 
             String ts=null;
            if((temp>='0'&&temp<='9')||(temp>='a'&&temp<='f')||(temp>='A'&&temp<='F')){
                if (temp=='a'||temp=='A') {
                    ts=Integer.toBinaryString(10);
                }else if (temp=='b'||temp=='B') {
                    ts=Integer.toBinaryString(11);
                }else if (temp=='c'||temp=='C') {
                    ts=Integer.toBinaryString(12);
                }else if (temp=='d'||temp=='D') {
                    ts=Integer.toBinaryString(13);
                } else if (temp=='e'||temp=='E') {
                    ts=Integer.toBinaryString(14);
                } else if (temp=='f'||temp=='F') {
                    ts=Integer.toBinaryString(15);
                } else   {
                    ts=Integer.toBinaryString(Integer.parseInt(temp.toString()));//转换成二进制字符串
                } 
                StringBuilder tempBuilder=new StringBuilder();
                //以4个bit进行处理
                for(int j=ts.length();j<4;j++){
                    tempBuilder.append('0');
                }
                tempBuilder.append(ts);
                tempBuilder.reverse();
                int index=Integer.parseInt(tempBuilder.toString(), 2);//将二进制转换为十进制整数
                stringBuilder.replace(i, i+1, oArr[index].toString()); //替换得到最终字符
            }
        }
         System.out.println(stringBuilder.toString());
         
         
    }



}

 

posted on 2018-01-12 00:14  天地无极,乾坤剑法  阅读(273)  评论(0)    收藏  举报