다음 코드는 2를 인쇄합니다.
String word = "bannanas";
String guess = "n";
int index;
System.out.println(
index = word.indexOf(guess)
);
문자열 “bannanas”에서 “n”( “guess”)의 모든 인덱스를 얻는 방법을 알고 싶습니다.
예상되는 결과는 다음과 같습니다. [2,3,5]
답변
이것은 Peter Lawrey의 솔루션 이 가진 -1
끝에 없는 위치 목록을 인쇄해야합니다 .
int index = word.indexOf(guess);
while (index >= 0) {
System.out.println(index);
index = word.indexOf(guess, index + 1);
}
for
루프 로도 수행 할 수 있습니다 .
for (int index = word.indexOf(guess);
index >= 0;
index = word.indexOf(guess, index + 1))
{
System.out.println(index);
}
[참고 : guess
한 문자보다 길 수있는 경우 guess
문자열 을 분석 word
하여 위의 루프보다 더 빠르게 반복 할 수 있습니다. 이러한 접근 방식의 벤치 마크는 Boyer-Moore 알고리즘 입니다. 그러나 그러한 접근 방식을 선호하는 조건은 존재하지 않는 것 같습니다.]
답변
다음을 시도하십시오 (지금 끝에 -1이 인쇄되지 않습니다!)
int index = word.indexOf(guess);
while(index >= 0) {
System.out.println(index);
index = word.indexOf(guess, index+1);
}
답변
String string = "bannanas";
ArrayList<Integer> list = new ArrayList<Integer>();
char character = 'n';
for(int i = 0; i < string.length(); i++){
if(string.charAt(i) == character){
list.add(i);
}
}
결과는 다음과 같이 사용됩니다.
for(Integer i : list){
System.out.println(i);
}
또는 배열로 :
list.toArray();
답변
Java9를 사용하면 iterate(int seed, IntPredicate hasNext,IntUnaryOperator next)
다음과 같이 사용할 수 있습니다 .
List<Integer> indexes = IntStream
.iterate(word.indexOf(c), index -> index >= 0, index -> word.indexOf(c, index + 1))
.boxed()
.collect(Collectors.toList());
System.out.printlnt(indexes);
답변
int index = -1;
while((index = text.indexOf("on", index + 1)) >= 0) {
LOG.d("index=" + index);
}
답변
정규 표현식을 사용하여 Java 9에서 기능적으로 수행 할 수 있습니다.
Pattern.compile(Pattern.quote(guess)) // sanitize input and create pattern
.matcher(word) // create matcher
.results() // get the MatchResults, Java 9 method
.map(MatchResult::start) // get the first index
.collect(Collectors.toList()) // collect found indices into a list
);
다음은 CharSequence
확장 메소드를 사용 하여이 로직을 API에 새로운 메소드로 추가하는 Kotlin 솔루션입니다 .
// Extension method
fun CharSequence.indicesOf(input: String): List<Int> =
Regex(Pattern.quote(input)) // build regex
.findAll(this) // get the matches
.map { it.range.first } // get the index
.toCollection(mutableListOf()) // collect the result as list
// call the methods as
"Banana".indicesOf("a") // [1, 3, 5]
답변
String word = "bannanas";
String guess = "n";
String temp = word;
while(temp.indexOf(guess) != -1) {
int index = temp.indexOf(guess);
System.out.println(index);
temp = temp.substring(index + 1);
}