JavaRush /Blog Java /Random-PL /Przerwa kawowa #115. Prosty sposób grupowania obiektów w ...

Przerwa kawowa #115. Prosty sposób grupowania obiektów w Javie. Metoda charAt() - jak jej używać w Javie

Opublikowano w grupie Random-PL

Łatwy sposób grupowania obiektów w Javie

Źródło: Dev.to W tym przykładzie dowiemy się, jak uprościć grupowanie obiektów Map , które zawierają kolekcje jako wartości. Przerwa kawowa #115.  Prosty sposób grupowania obiektów w Javie.  Metoda charAt() – jak jej używać w Javie – 1Przykładowo mamy obiekt Map , w którym kluczem jest liczba całkowita , a wartościami jest tablica ciągów znaków:
Grouper<Integer, String> grouper = new ArrayListGrouper<>();
        grouper.put(1, "a");
        grouper.put(1, "b");
        grouper.put(1, "c");
        grouper.put(1, "c");
        grouper.put(2, "c");
Wynik:
{1=[a, b, c, c], 2=[c]}
Wszystko, co musimy zrobić, to zdefiniować strategię grupowania. Na przykład już zdefiniowana klasa ArrayListGrouper wykorzystuje ArrayList jako swoją strategię . Zawsze możemy zdefiniować nowego Groupera , który będzie korzystał z innego GroupingStrateg . Teraz zmieńmy ArrayList na HashSet, aby elementy były unikalne:
public class HashSetGrouper<K, V> extends Grouper<K, V> {

    public HashSetGrouper() {
        super(HashSet::new);
    }
}
Następnie testujemy:
@Test
    public void testHashSetGrouper() {
        Grouper<Integer, String> grouper = new HashSetGrouper<>();
        grouper.put(1, "a");
        grouper.put(1, "b");
        grouper.put(1, "c");
        grouper.put(1, "c");
        grouper.put(2, "c");
        System.out.println(grouper);

    }
Wynik:
{1=[a, b, c], 2=[c]}
Klucz 1 ma teraz zestaw, w którym wartość c nie jest powtarzana. Przykładowy kod jest opublikowany na Githubie .

Metoda charAt() - jak jej używać w Javie

Źródło: FreeCodeCamp Metoda charAt() w Javie zwraca wartość znaku char w ciągu znaków o podanym lub określonym indeksie. Dzisiaj zobaczymy, jak używać metody charAt() , zaczynając od jej składni, a następnie przyjrzymy się kilku przykładom i przypadkom użycia.

Jak korzystać z metody Java charAt().

Oto jak wygląda składnia metody charAt() :
public char charAt(int index)
Należy pamiętać, że znaki zwrócone z ciągu znaków przy użyciu metody charAt() są typu danych char . Za chwilę przekonamy się, jak wpływa to na konkatenację zwracanych wartości. Teraz spójrzmy na przykłady:
public class Main {
  public static void main(String[] args) {

    String greetings = "Hello World";

    System.out.println(greetings.charAt(0));
    // H
  }
}
W powyższym kodzie nasz ciąg znaków, przechowywany w zmiennej o nazwie pozdrowienia , mówi „Hello World”. Użyliśmy metody charAt() , aby uzyskać znak o indeksie 0. Tym znakiem jest litera H. Pierwszy znak będzie zawsze miał indeks 0, drugi – 1 i tak dalej. Odstęp pomiędzy podciągami jest również uważany za indeks. W poniższym przykładzie zobaczymy, co się stanie, gdy spróbujemy połączyć różne zwrócone znaki. Konkatenacja oznacza połączenie ze sobą dwóch lub więcej wartości (w większości przypadków termin ten używany jest do łączenia znaków lub podciągów w ciągu).
public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";

    char ch1 = greetings.charAt(0); // H
    char ch2 = greetings.charAt(4); // o
    char ch3 = greetings.charAt(9); // l
    char ch4 = greetings.charAt(10); // d

    System.out.println(ch1 + ch2 + ch3 + ch4);
    // 391
  }
}
Stosując metodę charAt() otrzymaliśmy znaki o indeksach 0, 4, 9 i 10, którymi są odpowiednio litery H, o, l i d. Następnie próbowaliśmy wydrukować i połączyć te znaki:
System.out.println(ch1 + ch2 + ch3 + ch4);
Ale zamiast zwrócić „Hold”, otrzymaliśmy 391. Dzieje się tak, ponieważ zwracane wartości nie są już ciągami znaków, ale są typu char . Kiedy więc je połączymy, interpreter zamiast tego doda ich wartość ASCII. H ma wartość ASCII 72, o ma wartość 111, l ma wartość 108, a d ma wartość 100. Jeśli je dodamy, otrzymamy 391, co zostało zwrócone w ostatnim przykładzie.

Błąd StringIndexOutOfBoundsException

Kiedy przekazujemy numer sekwencyjny większy niż liczba znaków w naszym ciągu, w konsoli pojawia się błąd StringIndexOutOfBoundsException. Ten błąd dotyczy również użycia indeksowania ujemnego, które nie jest obsługiwane w Javie. W językach programowania, takich jak Python, które obsługują indeksowanie ujemne, przekazanie -1 da ci ostatni znak lub wartość w zestawie danych, podobnie jak 0 zawsze zwraca pierwszy znak. Oto przykład:
public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";

    char ch1 = greetings.charAt(20);

    System.out.println(ch1);

    /* Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 20
    */
  }
}
W powyższym kodzie przekazaliśmy indeks 20: char ch1 = pozdrowienia.charAt(20); , która przekracza liczbę znaków w naszej zmiennej pozdrowienia , więc otrzymaliśmy błąd. Komunikat o błędzie można zobaczyć w komentarzu w bloku kodu powyżej. Podobnie, jeśli przekażemy wartość ujemną w ten sposób: char ch1 = pozdrowienia.charAt(-1); , wtedy otrzymamy podobny błąd.

Wniosek

W tym artykule dowiedzieliśmy się, jak używać metody charAt() w Javie. Widzieliśmy, jak zwracać znaki w ciągu znaków na podstawie ich numeru indeksu i co się dzieje, gdy łączymy te znaki. Mówiliśmy także o niektórych przypadkach, w których można uzyskać odpowiedź na błąd podczas używania metody charAt() w Javie.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION