W Javie jest sposób na sprawdzenie warunku:
„Czy ten pojedynczy znak w ogóle pojawia się w ciągu x”
bez użycia pętli?
java
validation
string
character
barfoon
źródło
źródło
Odpowiedzi:
Możesz użyć
string.indexOf('a')
.Jeśli znak
a
jest obecny wstring
:źródło
indexOf()
używa pętli wewnętrznie. Żadna z odpowiedzi nie daje poprawnego rozwiązania, a jeśli ktoś odważy się zadać nowe pytanie, ludzie to deklarująDuplicate
. Naprawdę rozczarowujące; (String.contains()
która sprawdza, czy ciąg zawiera określoną sekwencję wartości charString.indexOf()
który zwraca indeks w ciągu pierwszego wystąpienia określonego znaku lub podłańcucha (istnieją 4 odmiany tej metody)źródło
String.contains(""+c)
Nie jestem pewien, o co dokładnie pyta oryginalny plakat. Ponieważ zarówno indexOf (...), jak i zawiera (...) prawdopodobnie używają pętli wewnętrznie, być może chce sprawdzić, czy jest to w ogóle możliwe bez pętli? Mogę myśleć o dwóch sposobach z ręki, jednym z nich byłaby oczywiście rekurencja:
Drugi jest znacznie mniej elegancki, ale kompletność ...:
Liczba linii rośnie, ponieważ trzeba oczywiście obsługiwać coraz dłuższe ciągi. Ale w ogóle nie ma pętli / rekurencji. Możesz nawet usunąć kontrolę długości, jeśli obawiasz się, że ta długość () używa pętli.
źródło
źródło
Możesz użyć 2 metod z
String
klasy.String.contains()
która sprawdza, czy ciąg zawiera określoną sekwencję wartości charString.indexOf()
który zwraca indeks w ciągu pierwszego wystąpienia określonego znaku lub podłańcucha lub zwraca -1, jeśli znak nie zostanie znaleziony (istnieją 4 odmiany tej metody)Metoda 1:
Metoda 2:
Linki: Zach Scrivena
źródło
Aby sprawdzić, czy coś nie istnieje w ciągu, musisz przynajmniej spojrzeć na każdy znak w ciągu. Więc nawet jeśli nie użyjesz wyraźnie pętli, będzie ona miała taką samą wydajność. To powiedziawszy, możesz spróbować użyć str.contains („” + char).
źródło
Jeśli musisz często sprawdzać ten sam ciąg znaków, możesz z góry obliczyć występowanie postaci. Jest to implementacja wykorzystująca tablicę bitów zawartą w długiej tablicy:
źródło
Tak, za pomocą metody indexOf () w klasie string. Zobacz dokumentację API dla tej metody
źródło
źródło
for
nie jest teraz pętlą?Wynik
źródło
źródło
}
źródło
Czy poniżej tego szukasz?
źródło
&& string.lastIndexOf(character) != index
Nie będziesz w stanie sprawdzić, czy znak w ogóle pojawia się w jakimś łańcuchu, nie przechodząc przynajmniej raz po nim przy użyciu pętli / rekurencji (wbudowane metody takie jak indexOf również używają pętli)
Jeśli nie razy sprawdzasz, czy znak jest w ciągu x, jest więcej niż długość ciągu, niż zaleciłbym użycie struktury danych Set , ponieważ byłoby to bardziej wydajne niż zwykłe użycie
indexOf
Za pomocą zestawu będziesz mógł sprawdzić, czy znak istnieje w ciągu w stałym czasie O (1), ale użyjesz również dodatkowej pamięci (złożoność przestrzeni będzie wynosić O (n)).
źródło
Użyłem do tego metody string.include (), która zwraca true lub false, jeśli łańcuch lub znak zostanie znaleziony. Zobacz poniższą dokumentację.
https://www.w3schools.com/jsref/jsref_includes.asp
źródło
// to tylko główny ... możesz użyć uskrzydlonego czytnika lub skanera
źródło