我有一个方法打印给定字符串中给定字符的索引。如果String不包含给定字符,则结果为-1。 我的代码如下所示:
public static int strpos(String text, char z) {
int x = 0;
char[] array = text.toCharArray();
for (int i = 0; i < array.length; i++) {
if (array[i] == z) {
x = i;
break;
} else {
x = -1;
}
}
return x;
}
public static void main(String[] args) {
System.out.println(strpos("abcdefghc", 'c'));
}
在这种情况下,结果是 2 ,如果我删除 break ,结果是 8 。我如何使用我的代码来获得2和8的结果?
答案 0 :(得分:0)
您只需返回一次即可获得两者的结果
但是,您可以返回ArrayList<Integer>
您需要:
add
就是您的列表。这就是如何轻松返回多个值的方法。
另外,为什么还有呢?
答案 1 :(得分:0)
一种解决方案是将索引存储在List<Integer>
中并更改方法以返回它:
public static List<Integer> strpos(String text, char z) {
List<Integer> indices = new ArrayList<>();
char[] array = text.toCharArray();
for (int i = 0; i < array.length; i++) {
if (array[i] != z) {
continue;
}
list.add(i);
}
return indices.isEmpty() ? Arrays.asList(-1) : indices;
}
答案 2 :(得分:0)
您可以将返回类型更改为List<Integer>
并收集列表中的所有匹配索引(或您选择的其他集合)。
在这种情况下,不是使用-1作为特殊值来表示字符串中不存在字符,而是返回空列表,
自然。
以下是实现这一目标的一种方法:
List<Integer> strpos(String text, char z) {
return IntStream.range(0, text.length())
.filter(i -> text.charAt(i) == z)
.boxed()
.collect(Collectors.toList());
}
或者,没有Java 8流,但受益于.indexOf
:
List<Integer> strpos(String text, char z) {
List<Integer> indexes = new ArrayList<>();
int index = -1;
while (true) {
index = text.indexOf(z, index + 1);
if (index == -1) {
break;
}
indexes.add(index);
}
return indexes;
}