繁体   English   中英

打印字符串中字符的位置

[英]Printing the position of character in a String

我有一种方法可以打印给定字符串中给定字符的索引。 如果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的结果?

您无法一次获得两个结果。
但是,您可以返回ArrayList<Integer>
您需要:

  • 初始化函数顶部的列表。
  • 每次您找到一个号码(而不是破坏号码)时,都addadd到列表中。
  • 完成搜索后,返回列表。

这样便可以轻松地返回多个值。

另外,为什么还有其他?

一种解决方案是将索引存储在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;
}

您可以将返回类型更改为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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM