[英]How to compare elements in a single string?
当且仅当1和0并排重复多次时,我需要以1和0的字符串打印元素的索引。
例如:输入:“0010011”输出:“0,3,5”
重复从索引0,3和5开始。
这是我现在拥有的
Scanner keyboard = new Scanner(System.in);
ArrayList runs = new ArrayList();
System.out.println("Enter non empty string of 1s and 0s");
String input = keyboard.nextLine();
char[] array = input.toCharArray();
for(int i = 0; i < input.length(); i++)
{
if(array[i] == array[i++])
{
runs.add(i);
}
}
for(int i = 0; i<= array.length; i++)
{
System.out.println(runs);
}
当我测试这个时,我尝试输入“00100”并获得“1,3,5”的输出。 另一个测试输入来自“0010011”以上并获得“1,3,5,7”。 它似乎是打印奇数,而不是数字开始重复的索引。 谁能发现我做错了什么? 我感觉它来自我在第一个for循环中的比较。
这应该工作:
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter non empty string of 1s and 0s");
String input = keyboard.nextLine();
char lastChar = '~'
for(int i=0; i<input.length() - 1; i++) {
if(input.charAt(i) == input.charAt(i + 1) && (i == 0 || input.charAt(i) != input.charAt(i - 1))) {
System.out.println(i);
}
}
我可以指出有三个直接的问题:
i++
,而您应该使用i + 1
。 i++
将增加的价值i
,所以你就错过了一个索引那里下一次迭代。 input.length() - 2
,否则当你访问最后一个索引的array[i + 1]
时,你会得到一个ArrayIndexOutOfBounds
异常。 0's
或1's
则当前逻辑将失败。 它将打印0
和1
索引,例如00010
。 对于第三点,你应该做的是,一旦你发现两个连续的字符相同,你应该跳过即将到来的相同角色。 你需要一个内循环。 可能是一段do-while
。
您应该将for
循环修改for
:
for(int i = 0; i < input.length() - 1; i++)
{
if(array[i] == array[i+1])
{
System.out.println(i);
do {
i++;
} while (i < input.length() - 1 && array[i] == array[i + 1]);
}
}
此外, ArrayList
没有length
属性。 您应该使用size()
方法来获得最大大小。
顺便说一句,这也可以使用正则表达式来完成。 好吧,你可能还没有被教过这个,但这只是另一种可能的方式:
Pattern pattern = Pattern.compile("0{2,}|1{2,}");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.start());
}
那里有两个问题:
首先,当postfix ++
在生效之前返回值时,所以你将array [i]与它自己进行比较。
另外,你每个循环都做两个加1,所以只有奇数。
尝试这个 :-
Scanner keyboard = new Scanner(System.in);
ArrayList runs = new ArrayList();
System.out.println("Enter non empty string of 1s and 0s");
String input = keyboard.nextLine();
char[] array = input.toCharArray();
for(int i = 0; i < input.length()-1; i++)
{
if(array[i] == array[i+1])
{
runs.add(i);
}
}
for(int i = 0; i<= array.length; i++)
{
System.out.println(runs);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.