내장 된 방법이 없습니다.
시작 위치를 허용하는 오버로드 된 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]
은 동일하게 작동하지만 난 INT는 [] = 새로운 INT [StringUtils.countMatches (명령, "\" ")] indexAll', StringUtils.countMatches' 은 깔끔'사용하여 생각,'하지만 그건 그냥 취향입니다. https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#countMatches(java.lang.String,%20java.lang.String) –