Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中捕获ascii中缺少的前导零_Java_Binary_Ascii - Fatal编程技术网

如何在java中捕获ascii中缺少的前导零

如何在java中捕获ascii中缺少的前导零,java,binary,ascii,Java,Binary,Ascii,我创建了一个程序,通过扫描仪输入接收字符串,并将其转换为二进制ASCII数字,还打印出每个字母的频率。 这是我的程序 import java.util.*; public class ASCII { public static void main (String [] args) { Scanner sc = new Scanner (System.in); System.out.println("Enter your sentence: " )

我创建了一个程序,通过
扫描仪
输入接收字符串,并将其转换为二进制ASCII数字,还打印出每个字母的频率。 这是我的程序

import java.util.*;

public class ASCII
{
    public static void main (String [] args)
    {
        Scanner sc = new Scanner (System.in);
        System.out.println("Enter your sentence: " );
        String myString = sc.nextLine();
        int length = myString.length();
        int ascii;
        char character;
        int[] myarray = new int[256];
        for(int i =0; i < length; i++)
        {
            character = myString.charAt(i);
            ascii = (int)character; // casting the character into an int
            System.out.print(Integer.toBinaryString(ascii) + " ");
            myarray[ascii]++; // counting the frequency of each letter in the string
        }

        System.out.println();

        for ( int k = 0; k < myarray.length; k++ )
        {
            if ( myarray[k] > 0 ) // if the frequency is greater than 0 do this print line, without this programm would print all 255 ascii characters.
            {
                System.out.println("'"+(char)k + "'" + " appeared " +    myarray[k]      + " times." );
            }
        }
    }
}
但我得到了:

"1101000 1100101 1101100 1101100 1101111 100000 1110100 1101000 1100101 1110010 1100101"
正如您所看到的,“100000”只有6位长,我的一些ascii值由于缺少前导零的问题而错误

我不知道我将如何着手解决这个问题,这就是为什么我在这里。如果有人能告诉我如何解决这个问题,那就太好了。

publicstaticvoidmain(String[]args)
public static void main (String [] args)
{
    String myString = "hello there";
    int length = myString.length();
    int ascii;
    char character;
    int[] myarray = new int[256];
    for(int i =0; i < length; i++)
    {
        character = myString.charAt(i);
        ascii = character; // casting the character into an int
        // not optimal, but works
        System.out.println(String.format("%7s", Integer.toBinaryString(ascii)).replace(' ', '0'));

        myarray[ascii]++; // counting the frequency of each letter in the string

    }
    System.out.println();

    for ( int k = 0; k < myarray.length; k++ )
    {
        if ( myarray[k] > 0 ) // if the frequency is greater than 0 do this print line, without this programm would print all 255 ascii characters.
        {
            System.out.println("'"+(char)k + "'" + " appeared " +    myarray[k]      + " times." );
        }
    }
}
{ String myString=“你好”; int length=myString.length(); int-ascii; 字符; int[]myarray=新int[256]; for(int i=0;i0)//如果频率大于0,则执行此打印行,如果没有此程序,则将打印所有255个ascii字符。 { System.out.println(“'”+(char)k+“'+”出现“+myarray[k]+”次”); } } }
您应该停止将字符串转换为整数并直接比较字符串,或者将k转换为字符串,附加所需数量的前导零,然后将其转换为字符。

使用时发生的情况:System.out.print(Integer.toString(ascii,2)+“”);是的,有128个ASCII代码点,编号为0-127,编码为值0-127。但是,基于Java使用ASCII的假设,您的程序中有一些坚持。Java、JavaScript、.NET、XML、HTML……使用
charAt(i)
返回一个UTF-16编码单元,其中一个或两个编码一个Unicode码点,例如a或欧元,或者使用这种方法,它实际上每个字母打印8位,而不是7位。您能修复它,使其打印7位吗?
public static void main (String [] args)
{
    String myString = "hello there";
    int length = myString.length();
    int ascii;
    char character;
    int[] myarray = new int[256];
    for(int i =0; i < length; i++)
    {
        character = myString.charAt(i);
        ascii = character; // casting the character into an int
        // not optimal, but works
        System.out.println(String.format("%7s", Integer.toBinaryString(ascii)).replace(' ', '0'));

        myarray[ascii]++; // counting the frequency of each letter in the string

    }
    System.out.println();

    for ( int k = 0; k < myarray.length; k++ )
    {
        if ( myarray[k] > 0 ) // if the frequency is greater than 0 do this print line, without this programm would print all 255 ascii characters.
        {
            System.out.println("'"+(char)k + "'" + " appeared " +    myarray[k]      + " times." );
        }
    }
}