有没有简单的方法来获取后面的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
答案 0 :(得分:3)
没有内置方法可以做到这一点。
使用接受起始位置的重载String#indexOf(String, int)
方法。保持循环直到你得到-1,始终将前一次调用的结果作为起始位置。您可以在List
中添加每个结果,然后将其转换为int[]
。
或者,使用Pattern
和Matcher
,循环,而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;
}