Ini harus mencetak daftar posisi tanpa -1
di akhir yang solusi Peter Lawrey ini telah memiliki.
int index = word.indexOf(guess);
while (index >= 0) {
System.out.println(index);
index = word.indexOf(guess, index + 1);
}
Ini juga bisa dilakukan sebagai for
loop:
for (int index = word.indexOf(guess);
index >= 0;
index = word.indexOf(guess, index + 1))
{
System.out.println(index);
}
[Catatan: jika guess
bisa lebih dari satu karakter, maka dimungkinkan, dengan menganalisis guess
string, untuk mengulang word
lebih cepat daripada loop di atas. Tolok ukur untuk pendekatan semacam itu adalah algoritma Boyer-Moore . Namun, kondisi yang mendukung penggunaan pendekatan seperti itu tampaknya tidak ada.]
indexOf
mengembalikan -1 ketika karakter tidak ditemukan.-1
di akhir adalah bahwado
loop mengeksekusi tubuh dan kemudian menemukan ituindex == -1
di terminatingwhile
.Hasil akan digunakan seperti ini:
Atau sebagai array:
sumber
Dengan Java9, seseorang dapat menggunakan hal-hal
iterate(int seed, IntPredicate hasNext,IntUnaryOperator next)
berikut: -sumber
sumber
Ini dapat dilakukan secara fungsional dengan Java 9 menggunakan ekspresi reguler:
Berikut Solusi Kotlin untuk menambahkan logika ini sebagai metode baru ke dalam
CharSequence
API menggunakan metode ekstensi:sumber
sumber
word.substring(word)
tidak dapat dikompilasi. : Psumber
Juga, jika u ingin menemukan semua indeks dari sebuah String dalam sebuah String.
sumber
guess
dulu"aba"
danword
dulu"ababa"
, tidak jelas apakahguess
terjadi sekali atau dua kali dalamword
. (Maksud saya, jelas bahwa seseorang dapat menemukanguess
mulai dari dua posisi berbeda, tetapi karena kemunculannya tumpang tindih, tidak jelas apakah keduanya harus dihitung.) Jawaban ini berpandangan bahwa kejadian yang tumpang tindih tidak dihitung sebagai berbeda. Tentu saja, karena kata-kata OP sangat menyarankan bahwaguess
akan selalu memiliki panjang 1, ambiguitas tidak muncul.Saya memiliki masalah ini juga, sampai saya menemukan metode ini.
Metode ini dapat digunakan untuk menemukan indeks bendera apa pun dengan panjang berapa pun dalam string, misalnya:
sumber
Kelas untuk memisahkan string yang saya buat. Tes singkat disediakan di akhir.
SplitStringUtils.smartSplitToShorterStrings(String str, int maxLen, int maxParts)
akan dipisahkan dengan spasi tanpa memutuskan kata, jika memungkinkan, dan jika tidak, akan dipisahkan dengan indeks sesuai maxLen.Metode lain yang disediakan untuk mengontrol bagaimana itu dibagi:
bruteSplitLimit(String str, int maxLen, int maxParts)
,spaceSplit(String str, int maxLen, int maxParts)
.Kode tes sederhana:
sumber
Ini adalah solusi java 8.
sumber
Ini dapat dilakukan dengan mengiterasi
myString
dan menggeserfromIndex
parameter diindexOf()
:sumber
mySubstring
, terlepas dari apakahmySubstring
dapat ditemukan di setiap posisi. Tidak sama sekali yang diinginkan OP ..Coba ini
sumber