Методът .subString не работи правилно, Java

Създавам проста програма за преобразуване на двоични числа в шестнадесетични, без използването на методите, предоставени от Java за това. Вече имам по-голямата част от кода си, просто имам проблем с моя метод "разделен низ".

По принцип всичко, което се опитвам да направя в този метод, е

1) Вземете низ (двоично число)

2) Създайте масив от низове, за да задържите "групите" от числа

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

4) Връща масива от групи

Въпреки това, когато използвам моя метод, винаги отнема само 3 за първия елемент в моя масив "groupings". (напр. трябва да бъде "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;   
    }

person Jimmie J    schedule 27.01.2012    source източник
comment
Ако това е домашно, моля, използвайте етикета за домашно.   -  person cheeken    schedule 27.01.2012
comment
Фактът, че substring() не работи за вас, като цяло не е индикация, че substring в Java не работи правилно (използва се без проблеми от хиляди)   -  person Mark Rotteveel    schedule 27.01.2012
comment
използвайте toSplit.substring(start, end+1) вместо toSplit.substring(start, end)   -  person Fahim Parkar    schedule 27.01.2012
comment
Работи за мен, с изключение на ArrayIndexOutOfBounds, причинени от неправилно оразмеряване на масива, когато дължината на низа не е кратна на 4.   -  person Dunes    schedule 27.01.2012


Отговори (4)


Не забравяйте, че substring няма да върне знака в индекса, означен с end. Връща end-1.

Javadoc и извлечете

public String подниз (int beginIndex, int endIndex)

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

Примери:

"hamburger".substring(4, 8) връща "urge"

"усмивки".substring(1, 5) връща "миля"

person Kevin D    schedule 27.01.2012

Вторият параметър (endIndex) в String.substring е изключителен, разгледайте внимателно примерите в документа.

person esaj    schedule 27.01.2012

Копирането на този код и стартирането му, той работи правилно. Така че няма проблем. Резултатът, използващ String.length, разделим на 4, е правилен.

person Sibbo    schedule 27.01.2012

Това работи само в по-стари IE (не в 8 или 9) и е грешка в сигурността - javascript не трябва да има способността да манипулира данните от клипборда.
person Katana    schedule 27.01.2012