Как взять строку, преобразовать указанную строку в двоичную, а затем взять каждую 1 или 0 и добавить ее в качестве значения в массив - PullRequest
1 голос
/ 06 ноября 2019

Я делаю некоторые тесты с сетками в java и как их генерировать с 1 и 0, где 1 - это [+], а 0 - [].

(TLDR):

Я хочу быть в состоянии взять слова (-и), преобразовать их в двоичные числа и добавить каждый отдельный 1 и 0 в массив

Способ, которым я настроил сетки:


        // code that tells method how to generate the grid
         int[] GRIDCODE3x3_1 = new int[]{
                  0, 1, 0,
                  1, 1, 1,
                  0, 1, 0
          };
         public void fillGridSpec(int[] x) {
         System.out.println("\n");
         int count = 0;
             String gridLine = " ";
             for(int p = 0; p < gridHeight; p++) {
                 gridLine = " ";
                 String[] gridArray = new String[gridWidth];
                 for(int q = 0; q < gridWidth; q++) {
                     if(x[count] == 1) {
                         gridArray[q] = "[+] ";
                         count++;
                     } else {              
                         gridArray[q] = "[ ] ";
                         count++;
                     }
                     gridLine += gridArray[q];
                 }
                 System.out.println(gridLine);
             }
        } 

Вывод будет:

[ ] [+] [ ]
[+] [+] [+]
[ ] [+] [ ]

С учетом этого я хочу привести пример того, что я хочу, чтобы он делал.

Допустим, строка выглядит как a

Двузначное число для этого равно 01100001, в которое мне нужно превратить это 0,1,1,0,0,0,0,1, поэтому вывод равен

[ ] [+] [+] [ ] [ ] [ ] [ ] [+]

, но мне также нужно, чтобы оно былоповторяется, как если бы строка представляла собой Hello World

(двузначный код):

01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100

(количество запятых здесь избыточно, поэтому я возьму его вамзнаете, во что мне нужно преобразовать это, и как работает вывод)

Если вам нужно какое-либо разъяснение того, что я прошу, задайте это в комментариях, и я свяжусь с вами как можно скорее.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Я не уверен, что вы хотите в соответствии с вашей темой следующим образом:

String str = "Hello World";
for (int i = 0; i < str.length(); i++) {
    String binStr = String.format("%8s", Integer.toBinaryString(str.charAt(i))).replace(' ', '0');

    int[] intArray = new int[binStr.length()];
    for (int j = 0; j < binStr.length(); j++) {
        intArray[j] = Integer.valueOf(String.valueOf(binStr.charAt(j)));

        // This also works 
        //intArray[j] = Character.getNumericValue(binStr.charAt(j));
    }
    System.out.println(Arrays.toString(intArray));
}

Консольный вывод

[0, 1, 0, 0, 1, 0, 0, 0]
[0, 1, 1, 0, 0, 1, 0, 1]
[0, 1, 1, 0, 1, 1, 0, 0]
[0, 1, 1, 0, 1, 1, 0, 0]
[0, 1, 1, 0, 1, 1, 1, 1]
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 1, 0, 1, 0, 1, 1, 1]
[0, 1, 1, 0, 1, 1, 1, 1]
[0, 1, 1, 1, 0, 0, 1, 0]
[0, 1, 1, 0, 1, 1, 0, 0]
[0, 1, 1, 0, 0, 1, 0, 0]

0 голосов
/ 06 ноября 2019

Все еще не уверен в том, что вы спрашиваете, но

String a = "01001000";
StringBuilder buf = new StringBuilder();

for (char c: a.toCharArray()) {
    buf.append("[");
    if (c == '1') {
        buf.append("+");
    }
    buf.append("] ");
}

System.out.println(buf);

edit

Если вход является символом, он может быть преобразован в двоичную строку типа

    String a = Integer.toBinaryString('a');
    System.out.println(a);
    StringBuilder buf = new StringBuilder();

    for (char c: a.toCharArray()) {
        buf.append("[");
        if (c == '1') {
            buf.append("+");
        }
        else {
            buf.append(" ");
        }
        buf.append("] ");
    }

    System.out.println(buf);
...