我正在尝试以树的顺序从给定的String获取子字符串,我的代码是
int val1 = 1;
String cc = "0011001010000000000000000000000";
for(int i = 0 ; i < 4 ; i++)
{
String[] sub1 = cc.split(cc.substring(val1));
cc = cc.substring(val1);
System.out.println(sub1[0]);
int u = val1;
val1 = u + u;
}
所以我应该得到的输出是..
0
01
1001
01000000
0000000000000000
但我的代码输出是
0
01
1001
01
该代码适用于其他值,例如
String cc = "0110011101010010100001100101001";
我也尝试获得零值但我出于某种原因得到它。谁能告诉我它为什么不起作用?
答案 0 :(得分:0)
只是一个猜测,但看起来你正试图获得包含二进制数字的序列化树的每个级别。
也就是说,你想获得前2 ^ 0个字符,然后是2 ^ 1,2 ^ 2等。
int val1 = 1;
String cc = "0011001010000000000000000000000";
for(int i = 0 ; i < 4 ; i++)
{
int beginIndex = Math.pow(2, i);
int endIndex = Math.pow(2, (i + 1));
string subs = cc.substring(beginIndex, endIndex);
System.out.println(subs);
}
如果这不是您想要的,请告诉我。
答案 1 :(得分:0)
我假设您正在尝试获得大小翻倍的连续子串。问题是你使用split
,这是完全没必要的;在您的...000000...
示例中,当您在常见事物上进行分割时,字符串会缩小到较小的尺寸。在您的另一种情况下,唯一可以找到的拆分分隔符就在最开始。
String str = "0011001010000000000000000000000";
String substr;
int substrLength = 1;
for(int i = 0; i < 4; i++, substrLength *= 2) {
substr = str.substring(0, substrLength);
str = str.substring(substrLength);
System.out.println(substr);
}
答案 2 :(得分:0)
您的错误是sub1
数组在第三步(打印1001
)之后的长度为2,并且您只打印firt值(所以步骤为01
)。
试试这个;
int val1 = 1;
String cc = "0011001010000000000000000000000";
for (int i = 0; i < 4; i++) {
String[] sub1 = cc.split(cc.substring(val1));
cc = cc.substring(val1);
for (String string : sub1) {
System.out.print(string);
}
System.out.println();
int u = val1;
val1 = u + u;
}
结果是;
0
01
1001
01000000
如果你想看到所有字符串cc,请改变你的for循环;
for (int i = 0; i < 5; i++) {
在此之后,结果是;
0
01
1001
01000000
0000000000000000
答案 3 :(得分:0)
我认为当你意识到它是分裂的时候,你总是试图获得前者的两倍是有点复杂的。这是一个简单地使用while循环和两个条件的解决方案
int val1 = 1, last = 0;
String cc = "00110010100000000000000000000";
while(last < cc.length())
{
if(val1 > cc.length()) {
val1 = cc.length();
}
String forOutput = cc.substring(last, val1);
last = val1;
val1 *= 2;
val1 += 1;
System.out.println(forOutput);
}
答案 4 :(得分:0)
我可以给你一个关于子串方法的非常简单的提示,而不是潜入特定的任务: