.subString方法无法正常工作,Java

时间:2012-01-27 16:19:58

标签: java binary hex grouping substring

我正在创建一个简单的程序来将二进制数转换为十六进制数,而不使用Java提供的方法来执行此操作。我已经拥有了大部分代码,我只是遇到了“分裂字符串”方法的问题。

基本上我在这个方法中所做的就是

1)接受一个字符串(二进制数)

2)创建一个字符串数组来保存数字的“分组”

3)将二进制数拆分为4位数组(例如10011101 = 1001,1101)

4)返回分组数组

然而,当使用我的方法时,我的“groupings”数组中的第一个元素总是只需要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 个答案:

答案 0 :(得分:4)

请记住,substring不会返回end表示的索引处的字符。它返回结束-1。

Javadoc和摘录

public String substring(int beginIndex,                         int endIndex)

返回一个新字符串,该字符串是此字符串的子字符串。子字符串从指定的beginIndex开始,并扩展到索引endIndex - 1处的字符。因此子字符串的长度为endIndex-beginIndex。

示例:

“hamburger”.substring(4,8)返回“敦促”

“smiles”.substring(1,5)返回“mile”

答案 1 :(得分:1)

String.substring中的第二个参数(endIndex)是独占的,请仔细查看文档中的示例。

答案 2 :(得分:0)

复制此代码并运行它,它可以正常工作。所以没有问题。使用可分割为4的String.length的输出是正确的。

答案 3 :(得分:0)

您的方法工作正常,但是当必须拆分的数字大小不是4的倍数时会抛出错误。这种方法更通用:

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;

    }