• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

java - sting.charAt(int)

Object Storage Arubacloud
+1 głos
321 wizyt
pytanie zadane 19 maja 2021 w Java przez Sc4red Użytkownik (590 p.)

hej spotkałem się z czymś takim:

String startDate="19.05.2021";  
String sd = startDate.charAt(6)+startDate.charAt(7)+startDate.charAt(8)+startDate.charAt(9)+"-"+startDate.charAt(3)+startDate.charAt(4)+"-"+startDate.charAt(0)+startDate.charAt(1);

System.out.println("1st character is: " + sd);  

wyświtla się odpowiedz:

"1st character is: 197-05-19"

 

nie powinno być raczej "1st character is: 2021-05-12" ?

 

Wiecie dlaczego tak jest?

2 odpowiedzi

+2 głosów
odpowiedź 19 maja 2021 przez Sc4red Użytkownik (590 p.)
startDate.charAt(int) zwraca ASCII, dopiero po "-" jest zapisywane jako string
komentarz 19 maja 2021 przez Wiciorny Ekspert (269,790 p.)

startDate.charAt(int) zwraca ASCII

no ... nie zwraca ASCII  
 

char charAt(int index)

Returns the char value at the specified index.

 

w implementacji tablicowej jest działanie metody, więc tak naprawdę  zwaraca pojedynczy znal, który jest na wskazanym indeksie - interując od 0 czyli literka np "5" jest na 4tej pozycji :) 

komentarz 19 maja 2021 przez ITshnyk Obywatel (1,800 p.)

@Sc4red,

Co oznacza

zwraca ASCII

0 głosów
odpowiedź 19 maja 2021 przez Wiciorny Ekspert (269,790 p.)
char charAt(int index)

Returns the char value at the specified index.

w implementacji tablicowej jest działanie metody, więc tak naprawdę  zawraca pojedynczy znal, który jest na wskazanym indeksie - integrując od 0 czyli literka np. "5" jest na 4tej pozycji :) zawsze indeksem elementu jest  pozycja-1 :) 

komentarz 19 maja 2021 przez ITshnyk Obywatel (1,800 p.)
edycja 19 maja 2021 przez ITshnyk
String startDate="19.05.2021";  
String sd = startDate.charAt(6)+startDate.charAt(7)+startDate.charAt(8)+startDate.charAt(9)+"-"+startDate.charAt(3)+startDate.charAt(4)+"-"+startDate.charAt(0)+startDate.charAt(1);
 
System.out.println("1st character is: " + sd);

To dlaczego to zwraca 197-05-19 a nie 2021-05-19? Bo jednak pytanie było o to.

1
komentarz 19 maja 2021 przez Oscar Nałogowiec (29,290 p.)

Kody ASCII

'0' - 48

'1'-49

'2'-50

"2021" = 50+48+50+49 = 197.

Zapisz to tak:

String sd = "" + startDate.charAt(6)+ ...

 

komentarz 19 maja 2021 przez ITshnyk Obywatel (1,800 p.)
O i to wszystko wyjaśnia, najlepszy komentarz, który powinien być odpowiedzią.
1
komentarz 19 maja 2021 przez Oscar Nałogowiec (29,290 p.)

Wcale nie wszystko, z odpowiedziami jest ten problem, że nie wiadomo na jakim poziomie odpowiedź będzie wystarczająca. Jak się zejdzie za nisko pytający może mieć wrażenie, że się go niedocenia. Najlepiej dać odpowiedź na w miarę wysokim poziomie jak odpowiedź kolegi @Sc4red, który wzrócił uwagę, że dopiero jak operator + zauważył argument string to zaczął działać na stringach. I potem jeśli pytający nie zrozumiał zejść kroczek niżej.

Bo sednem problemu jest przeciążanie operatorów. Operator + działa różnie w zależności od typu argumentów. I niestety char + char nie daje string tylko pewnie char (sumuje kody ASCII - to taka zaszłość z C - chyba nawet nie ma jakoś łatwo dostępnej pełnej tabeli przeciążania operatorów w javie). Dopiero wymuszenie typu string zmienia wynik na string i potem już string + cokolwiek => string, to cokolwiek jest konwertowanę metodą toString(). Dlatego też często stosuje się "" jako pierwszy argument sumowania by od razu wymusić typ string.

Podobne pytania

0 głosów
1 odpowiedź 161 wizyt
pytanie zadane 13 grudnia 2018 w JavaScript przez gnu_ewm Gaduła (3,340 p.)
0 głosów
2 odpowiedzi 899 wizyt
pytanie zadane 12 listopada 2017 w Java przez niezalogowany
+1 głos
1 odpowiedź 132 wizyt

92,568 zapytań

141,420 odpowiedzi

319,622 komentarzy

61,954 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...