对字符串编号中的每个数字进行标记?

时间:2014-04-10 06:12:23

标签: java stringtokenizer

我在这里得到了一些代码:

public class Project1 {
    public static void main(String args[])
    {
        Scanner input = new Scanner(System.in);
        System.out.println("Input a binary number");
        String binary = input.nextLine();
        System.out.println(Conversion(binary)); 
    }

    public static int Conversion(String binary)
    {
        StringTokenizer st = new StringTokenizer(binary, " ");
        int n = st.countTokens() - 1; // Used as the power number in b^n for conversion
        int result = 0;
        while(st.hasMoreTokens()){
            int binaryInt = Integer.parseInt(st.nextToken());
            result += binaryInt * (1 << n);
            n--;
        }
        return result;
    }

}

它工作得很漂亮......如果输入在二进制数之间有空格。例如,如果输入为1 1 1 1,则它将正确地返回15。很酷,但是如何更改令牌器以不需要空格来分割每个数字?我尝试了StringTokenizer(binary, "");StringTokenizer(binary);,但都没有正确地将每个数字拆分成自己的令牌。

您会注意到,虽然StringTokenizer显然只适用于字符串,但我在转换结果之前已将字符串转换为整数。

3 个答案:

答案 0 :(得分:2)

@ Tony我想你试图在这里添加数字的ascii值 输入值10 第一次运行

int binaryInt = binary.char(i);所以binaryInt会得到值= 49(char的问题值&#39; 1&#39;)

因此结果= 49 * 2 = 98

第二轮

结果= 98 + 48 * 1 = 146

以下功能将满足您的目的,输入String&#34; 1101&#34; ,它返回13

  public int getDecimal(String binaryString){
        //binaryString = "1101";
        int result = 0;
        int n = binaryString.length()-1;
        for(int i=0;i<binaryString.length();i++)
        {
            int num = binaryString.charAt(i);
            if(num>=48 && num <=57){
                result+=(num-48) * Math.pow(2, n)  ;
                n --;
            }

        }

        return result;
    }

   }

答案 1 :(得分:1)

这样的事情怎么样:

    // remove everything that is not a digit
    String digitsOnly = binary.replaceAll("[^\\d]","");
    //iterate over every digit
    for(char digit:digitsOnly.toCharArray()) {
        int n = Character.getNumericValue(digit);
        // do stuff...
    }

答案 2 :(得分:0)

如果你得到像"10011010"这样的字符串,你不需要一个标记器,你可以迭代字符串并使用charAt

for (int i = 0; i < s.length(); i++) {
    char currentDigit = s.charAt(i);
    // Do stuff with the digit
}