问题:我正在玩Java,我正在尝试计算字符串中的连续“字符”。
示例:
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String binaryString = Integer.toBinaryString(n);
上面的代码返回输入的整数值的二进制字符串。如果我们输入数字5,则返回:101
我现在希望遍历String并检查String中是否有连续的1。
for (int i = 0; i < binaryString.lenth(); i++)
{
// code comes here...
}
我不知道怎么检查这个。我尝试过以下方法:
for (int i = 0; i < binaryString.length(); i++)
{
char charAtPos = binaryString.charAt(i);
char charAtNextPos = binaryString.charAt(i+1);
if (charAtPos == '1')
{
if (charAtPos == charAtNextPos)
{
consecutive += 1;
}
}
}
但是这显然会抛出一个ArrayIndexOutOfBounds,因为i+1
会产生一个大于数组长度的数字。
提前感谢您的回答。
欧文
答案 0 :(得分:2)
尝试运行for循环,其大小为1,小于strin的长度
for (int i = 0; i < (binaryString.length()-1); i++)
{
char charAtPos = binaryString.charAt(i);
char charAtNextPos = binaryString.charAt(i+1);
if (charAtPos == '1')
{
if (charAtPos == charAtNextPos)
{
consecutive += 1;
}
}
}
答案 1 :(得分:1)
您只需要一行:
binaryString.split("1(?=1)").length() - 1;
答案 2 :(得分:0)
我们仍然可以使用和运算符
简化您的代码 import java.util.Scanner;
class StackBinary
{
public static void main(String args[])
{
Scanner in = new Scanner(System.in);
String n = Integer.toBinaryString(in.nextInt());
for (int i = 0; i < n.length()-1; i++)
{
char charAtPos = n.charAt(i);
char charAtNextPos = .charAt(i+1);
if (charAtPos == '1' && charAtNextPos == '1')
{
consecutive+=1;
}
}
}