Я создал программу, которая принимает строку на Scanner
и преобразует ее в ASCII-номера в двоичном формате, а также выводит частоту каждой буквы. Вот моя программа, как этоКак убрать недостающие ведущие нули в ascii в java
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.");
}
}
}
}
Как мы все знаем, каждый из ASCII должен быть длиной 7 бит длиной, но для моей программы это не всегда так, как это не ловя ведущие нули. Например, если бы я передать в строке «привет» ожидаемый результат должен быть
"1101000 1100101 1101100 1101111 0100000 1110100 1101000 1100101 1110010 1110010 1100101"
, но я получаю:
"1101000 1100101 1101100 1101100 1101111 100000 1110100 1101000 1100101 1110010 1100101"
, как вы можете видеть, «100000» только 6 бит в длину, а некоторые из моих значений ascii просто неправильны из-за этой недостающей главной проблемы нулей.
Я не уверен, как бы я решил исправить эту проблему, и именно поэтому я здесь. Если бы кто-нибудь мог показать мне, как это можно исправить, это было бы здорово.
Что происходит при использовании: System.out.print (Integer.toString (ascii, 2) + ""); –
Да, имеется 128 кодовых точек ASCII с номером 0-127 и закодировано как значения 0-127. Но у вас есть несколько настойчив в вашей программе, исходя из предположения, что Java использует ASCII. Java, JavaScript, .NET, XML, HTML, ... используют [Unicode] (http://www.unicode.org/charts/nameslist/index.html). 'charAt (i)' возвращает код UTF-16, один или два из которых кодируют код Unicode, например A или € или. Если вы хотите иметь дело только с подмножеством, например с C0 Controls и Basic Latin block, вы должны поместить в свою программу защитника (if-throw или аналогичного). –