Метод .subString не работает правильно, Java - PullRequest
2 голосов
/ 27 января 2012

Я создаю простую программу для преобразования двоичных чисел в шестнадцатеричные, без использования методов, предоставляемых Java для этого. У меня уже есть большая часть кода, но у меня просто проблемы с моим методом «разделенной строки».

В основном все, что я пытаюсь сделать в этом методе, это

1) Взять в строку (двоичное число)

2) Создать массив строк для хранения «групп» чисел

3) Разбить двоичное число на группы по 4 цифры (например, 10011101 = 1001, 1101)

4) Вернуть массив группировок

Однако при использовании моего метода всегда требуется только 3 для первого элемента в моем массиве "группировки". (например, должно быть «1001», но только «100»). Что я тут не так делаю?

public String[] splitIntoFours (String toSplit) {
    int stringPart = 4;
    int arraySize = toSplit.length() / 4;
        String[] groupings = new String[arraySize];
        for (int iterator = 0; (iterator * stringPart) < toSplit.length(); iterator++){
            //If statement to deal with the inital case of the iterator being 0, 
            //where this algorithm only takes the first 3 numbers instead of a 
            //sequence of 4 numbers.

            int start = iterator * stringPart;
            int end = start + stringPart;
            if (end > toSplit.length()) {
                 end = toSplit.length();
            }
            groupings[iterator] = toSplit.substring(start, end);
        }
    return groupings;   
    }

Ответы [ 4 ]

4 голосов
/ 27 января 2012

Помните, что подстрока не будет возвращать символ с индексом, обозначенным как end.Возвращает end-1.

Javadoc и извлечение

публичной подстроки String (int beginIndex, int endIndex)

Возвращает новую строку, которая являетсяподстрока этой строки.Подстрока начинается с указанного beginIndex и продолжается до символа с индексом endIndex - 1. Таким образом, длина подстроки равна endIndex-beginIndex.

Примеры:

"гамбургер" .substring (4, 8) возвращает «urge»

«smiles» .substring (1, 5) возвращает «mile»

1 голос
/ 27 января 2012

Второй параметр (endIndex) в String.substring является эксклюзивным, внимательно посмотрите на примеры в документе.

0 голосов
/ 27 января 2012

Ваш метод работает нормально, хотя он выдает ошибку, когда размер числа, которое должно быть разделено, не кратен четырем. Этот метод немного более общий:

public static String[] split(String str, int sizeOfGroups) {
        int arraySize = str.length() / sizeOfGroups;
        String[] groupings = new String[arraySize+1];
        int num1, num2;

        for (int i = 0; i * sizeOfGroups < str.length(); i++) {

            num1 = i * sizeOfGroups + sizeOfGroups;
            num2 = i * sizeOfGroups;

            if ((num1 >= str.length())) {
                groupings[i] = str.substring(num2, str.length());
            } else {
                groupings[i] = str.substring(num2, num1);
            }
        }

        return groupings;

    }
0 голосов
/ 27 января 2012

Скопировав этот код и запустив его, он работает правильно. Так что проблем нет. Вывод с использованием String.length, делимого на 4, является правильным.

...