Java 打印字符串中字符的位置

Java 打印字符串中字符的位置,java,arrays,string,Java,Arrays,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) {

我有一个方法,可以在给定字符串中打印给定字符的索引。如果字符串不包含给定字符,则结果为-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'));
}
publicstaticintstrpos(字符串文本,charz){
int x=0;
char[]数组=text.toCharArray();
for(int i=0;i

在这种情况下,结果是2,如果我删除break,结果是8。如何修改代码以获得2和8的结果?

单次返回无法同时获得2和8的结果。
但是,您可以返回一个
ArrayList

您需要:

  • 初始化函数开头的列表
  • 每次找到一个数字时,不要打断,而是将其添加到列表中
  • 完成搜索后,返回列表
这就是您可以轻松返回多个值的方式


另外,为什么还有else?

一种解决方案是将索引存储在
列表中,并更改返回方法:

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;
}
公共静态列表strpo(字符串文本,字符z){
列表索引=新的ArrayList();
char[]数组=text.toCharArray();
for(int i=0;i
您可以将返回类型更改为
列表
,并收集列表(或您选择的其他集合)中的所有匹配索引。 在这种情况下,不使用-1作为特殊值来指示字符串中不存在字符,而是返回空列表, 当然

这里有一种实现方法:

List<Integer> strpos(String text, char z) {
    return IntStream.range(0, text.length())
            .filter(i -> text.charAt(i) == z)
            .boxed()
            .collect(Collectors.toList());
}

你试过使用
String.indexOf(char)
方法吗?如果它相等,就把它添加到列表中不是更容易吗?@Neo我很困惑,因为我就是这么做的。逻辑上是的,但是如果char与
z
不同,你可以通过
continue
来实现它。检查它是否等于z,如果等于,则添加它不是更容易吗?不需要
continue
required,行数更少,可读性更强。这是我个人的偏好,因为我倾向于处理许多情况,其中应该跳过循环的特定迭代。归根结底,这没有任何区别。我同意这并不重要。如果给定的字符不在字符串中,则打印-1。@PiotrWanjas使用“c”和字符串“abcdefgch”测试该方法,而不使用
中断。你应该得到一个7,但是你会得到一个-1,因为
else
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;
}