字符串合并处理 (中级)

import java.util.Arrays;
import java.util.Scanner;


public class CombineString {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String str1 = sc.next();
		String str2 = sc.next();
		StringBuilder sb = new StringBuilder(str1);
		
		sb.append(str2);
		String str = sb.toString();
		
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();
		for (int i = 0; i < str.length(); i++) {
			if(i%2!=0)
				sb1.append(str.charAt(i));
			else
				sb2.append(str.charAt(i));
				
		}
		char[] ch_a = sb1.toString().toCharArray();
		char[] ch_b = sb2.toString().toCharArray();
		Arrays.sort(ch_a);
		Arrays.sort(ch_b);
		StringBuilder sb_a = new StringBuilder();
		for (int i = 0; i < ch_a.length; i++) {
			sb_a.append(ch_b[i]);
				sb_a.append(ch_a[i]);
				
		}
		String result = sb_a.toString();
		for (int i = 0; i < result.length(); i++) {
			char ch = result.charAt(i);
			fun(ch);
			
		}
	}

	private static void fun(char ch) {
		
		if((ch>='0'&&ch<='9') || (ch>='A'&&ch<='F') || (ch>='a'&&ch<='f')){
			String ss = ch + "";
			int a = Integer.parseInt(ss, 16);
			String s_a = Integer.toBinaryString(a);
			int a_int = Integer.parseInt(s_a);
			//倒序
			String str = a_int+"";
			StringBuilder sb = new StringBuilder();
			for (int i = str.length()-1; i >=0; i--) {
				sb.append(str.charAt(i));
			}
			String str1 = sb.toString();
			String str_hex = bitToHex(str1);
			
			System.out.print(str_hex.toUpperCase());
		}
		else
			return;
	}

	private static String bitToHex(String bString) {
		if (bString == null || bString.equals(""))  
            return null;  
        StringBuffer tmp = new StringBuffer();  
        int iTmp = 0;  
        for (int i = 0; i < bString.length(); i += 4)  
        {  
            iTmp = 0;  
            for (int j = 0; j < 4; j++)  
            {  
                iTmp += Integer.parseInt(bString.substring(i + j, i + j + 1)) << (4 - j - 1);  
            }  
            tmp.append(Integer.toHexString(iTmp));  
        }  
        return tmp.toString();  
	}

}

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

详细描述:

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

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

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


该方案虽然样例输出没问题,但是OJ错误。应该是我理解错了。看下面这个正确运行的答案:

import java.util.Scanner;
public class Main {

	public static void main(String[] arg0){
		Scanner sc = new Scanner(System.in);
		String s1 = sc.next();
		String s2 = sc.next();
		char[] c = (s1+s2).toCharArray();

		sort(c, c.length-1);
		sort(c, c.length-2);

		for(int i = 0; i < c.length; i++){
			System.out.print(change(c[i]));
		}
	}

	public static char change(char c ){
		char[] word = "ABCDEF".toCharArray();
		int v = 0;
		if(c >= '0' && c <= '9'){
			v = c - 48;
		}else if( c >= 'a' && c <= 'f'){
			v = c - 87;
		}else if( c>= 'A' && c <= 'F'){
			v = c - 55;
		}else return c;

		String str = Integer.toBinaryString(v);
		v = 0;
		for(int i = 0; i < str.length(); i++){
			v += (str.charAt(i)-48) *((int) Math.pow(2, i));
		}

		if(v >= 10) c = word[v-10];
		else c = (char) (v + 48);

		return c;
	}

	public static void sort(char[] c, int lastIndex){
		for(int i = 0; i < c.length; i = i + 2){
			for(int j = lastIndex; j > 1; j = j -2){
				if(c[j] < c[j - 2]){
					char t = c[j];
					c[j] = c[j - 2];
					c[j-2] = t;
				}
			}
		}

	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值