Java String获取多个索引值

时间:2014-12-11 02:14:58

标签: java string indexof

有没有简单的方法来获取后面的String上的双引号字符(“”)的所有索引值,而不是使用“split”方法。谢谢。

String command = "-u User -P Password mkdir \"temp dir\" rmdir \"host dir\"";
int[] indexAll = command.indexOf ("\""); // This line of code is not compile, only I expect this kind of expression   

2 个答案:

答案 0 :(得分:3)

没有内置方法可以做到这一点。

使用接受起始位置的重载String#indexOf(String, int)方法。保持循环直到你得到-1,始终将前一次调用的结果作为起始位置。您可以在List中添加每个结果,然后将其转换为int[]

或者,使用PatternMatcher,循环,而Matcher#find()返回结果。

以下是一些例子:

public static void main(String[] args) {
    String command = "-u User -P Password mkdir \"temp dir\" rmdir \"host dir\"";
    List<Integer> positions = new LinkedList<>();
    int position = command.indexOf("\"", 0);

    while (position != -1) {
        positions.add(position);
        position = command.indexOf("\"", position + 1);
    }
    System.out.println(positions);

    Pattern pattern = Pattern.compile("\"");
    Matcher matcher = pattern.matcher(command);
    positions = new LinkedList<>();

    while (matcher.find()) {
        positions.add(matcher.start());
    }

    System.out.println(positions);
}

打印

[26, 35, 43, 52]
[26, 35, 43, 52]

答案 1 :(得分:1)

这与Sotirios方法类似,但您可以通过首先查找出现次数来避免转换回数组,以便初始化数组。

String command = "-u User -P Password mkdir \"temp dir\" rmdir \"host dir\"";
int count = command.length() - command.replace("\"", "").length();
int indexAll[] = new int[count];
int position = 0;
for(int i = 0; i < count; i++) {
  position = command.indexOf("\"", position + 1);
  indexAll[i] = position;
}