我正在创建一个简单的程序来将二进制数转换为十六进制数,而不使用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;
}
答案 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;
}