将String转换为char [] - Java

时间:2015-10-28 15:21:37

标签: java arrays string char

这是我将二进制转换为格雷码的功能。

public void convert(String bin)
{
    char[] b = bin.toCharArray();
    char[] g = new char[100];
    System.out.print(g[0]);
    for(int i=1;i<b.length;i++)
    {
        System.out.print(g[i] = (b[i-1] + b[i]) - 96);
        if(g[i] == '2')
        {
            System.out.print(0);
            i++;
            continue;
        }
        System.out.print(g[i] - 0);
    }
}

我有上面的功能完全正常,但我想从这个函数返回转换后的字符串。所以我想出了下面给出的代码,它没有正常工作,它只给出了我在开始时存储的单个数字,即结果为g [0] = b [0]。

public String convert(String bin)
{
    char[] b = bin.toCharArray();
    char[] g = new char[100];
    g[0] = b[0];
    for(int i=1;i<b.length;i++)
    {
        g[i] = (char)((b[i-1] + b[i]) - 96);
        if(g[i] == '2')
        {
            g[i] = 0;
            i++;
            continue;
        }
        g[i] = g[i] - 0;
    }
    String gray = String.valueOf(g);
    return gray;
}

我该怎么做才能给我想要的结果。

由于

2 个答案:

答案 0 :(得分:1)

    public static String convert(String bin)
    {

        //System.out.println( "The Gray Equivalent Is: ");
        char[] b = bin.toCharArray();
        StringBuilder g = new StringBuilder(); // Use StringBuilder
        g.append(b[0]);
        //System.out.print(g[0]);
        for(int i=1;i<b.length;i++)
        {
            int val = (int)b[i-1] ^(int) b[i]; // use exclusive-or( ^ ) 
            if(val == '2')
            {
                //System.out.print(0);
                g.append(0);
                i++;
                continue;
        }

        //System.out.print(g[i] - 0);
        g.append(val);
    }

    String gray = String.valueOf(g);
    return gray;
}

答案 1 :(得分:0)

我明白你想要达到的目标。但是您将整数值误认为字符值。看:

int是一个整数数值,可以包含正数和负数:-3,-2,-1,0,1,2,3 ...

char仍然是一个数字值,但表示为字母:&#39; a&#39;(97),&#39; b&#39;(98),&#39; c&# 39;(99)...

我知道你已经知道了这一点,因为你已经足够小心地计算两个字符的总和并将其标准化为2 *&#39; 0&#39; (= 96)。好。

但您必须注意代码中包含的每个数字都隐式为int 。现在,要意识到您要将intschars分成几行:

if(g[i] == '2')
g[i] = 0;
g[i] = g[i] - 0;

我的建议:点击订单:

  1. Fist,规范化您的数据并将它们存储到临时的int变量中: int digit0=b[i - 1]-'0'; int digit1=b[i]-'0';
  2. 执行计算并将其存储到临时int变量中: int result=digit0 + digit1; if (result==2) { result=0; }
  3. 最后,对结果进行反规范化并将其存储到最终输出变量中: g[i]=(char)(result + '0'); 在最后一个地方,您还必须控制数组的长度:如果您知道输入数组的长度,则应该使用相同的长度预先调整输出数组的大小。