porównanie stringa

0

Mam pytanie jak w javie mogę wykonać poniższą operację.

String litera="b";

if(litera>="a") //jak wykonać takie porównanie
{
System.out.println("OK");
}
0

Metoda compareTo lub compareToIgnoreCase.

0

A niby co ma oznaczać relacja "większy równy" dla łańcuchach znaków? Można ją zdefiniować na co najmniej kilka sposobów, więc jest w idei swojej niejednoznaczna, wychodzi z tego jakiś absurd.

0

Hmm, tak samo jak relację porządku liniowego można zrealizować na wiele sposobów, można też na wiele sposobów zrealizować relację równoważności. Np relacja "==" mogłaby sprawdzać identyczność pierwszych dwóch znaków :]

0
Wibowit napisał(a)

Hmm, tak samo jak relację porządku liniowego można zrealizować na wiele sposobów, można też na wiele sposobów zrealizować relację równoważności. Np relacja "==" mogłaby sprawdzać identyczność pierwszych dwóch znaków :]

Owszem, tylko taka definicja byłaby maksymalnie c****. Równość łańcuchów znaków jako identyczność każdego znaku jest po prostu intuicyjna i logiczna.
Natomiast co miałaby oznaczać relacja ">="? Zwracać prawdę, gdy lewy argument zawiera w sobie prawy, coś w rodzaju metody startsWith? A może kod (ASCII lub Unicode) każdego znaku lewego argumentu ma być większy równy od kodu odpowiadającego elementu prawego argumentu? Tylko czy w tym przypadku muszą mieć równą długość? Jedno wielkie WTF.

0

@somekind, chyba gadasz od rzeczy. W końcu istnieją spisy alfabetyczne nazwisk, i mam wrażenie, że nie wszystkie nazwiska mają taką samą długość. Java przy porównywaniu Stringów (metoda compareTo) używa porządku leksykograficznego. Przeczytaj definicję.

If two strings are different, then either they have different characters at some index that is a valid index for both strings, or their lengths are different, or both. If they have different characters at one or more index positions, let k be the smallest such index; then the string whose character at position k has the smaller value, as determined by using the < operator, lexicographically precedes the other string.
If there is no index position at which they differ, then the shorter string lexicographically precedes the longer string.

0

Jedno wielkie WTF.
nie jedno wielkie WTF, tylko jeśli ustalimy JAK ma być przeprowadzane to porównywanie, i jeśli będzie ono miało sens, to dlaczego miałbyś nazywać to WTF?

0
bogdans napisał(a)

@somekind, chyba gadasz od rzeczy. W końcu istnieją spisy alfabetyczne nazwisk, i mam wrażenie, że nie wszystkie nazwiska mają taką samą długość. Java przy porównywaniu Stringów (metoda compareTo) używa porządku leksykograficznego.

Porządek leksykograficzny jest oczywisty. Ale polemizowałbym z tym, że jest on tożsamy relacji większości dla łańcuchów znaków, po prostu nigdzie się z taką jej definicją nie spotkałem.

Azarien napisał(a)

nie jedno wielkie WTF, tylko jeśli ustalimy JAK ma być przeprowadzane to porównywanie, i jeśli będzie ono miało sens, to dlaczego miałbyś nazywać to WTF?

WTFem nie będzie, jeśli nasza definicja relacji i operatora >= dla łańcuchów znaków będzie intuicyjna i oczywista, tak jak intuicyjna i oczywista jest dla liczb.

Ja bym jednak prosił o nie rozmydlanie dyskusji. Autor zamieścił kod, do którego fragmentu się odniosłem:

if(litera>="a") //jak wykonać takie porównanie

Ja tylko spytałem (autora konkretnie), co to niby ma być za relacja? Bo dla mnie ten zapis nie jest oczywisty. I pewno nie tylko dla mnie, bo w przeciwnym razie, zapewne taki operator byłby w Javie zdefiniowany. A przecież nie jest.

Aha, jak w Javie posortować tablicę String w porządku alfabetycznym? Próbowałem metodą Arrarys.sort, i zgodnie z moimi przewidywaniami, nie da się.

0

@somekind,

Ale polemizowałbym z tym, że jest on tożsamy relacji większości dla łańcuchów znaków, po prostu nigdzie się z taką jej definicją nie spotkałem.

Czego nie widziałem, to nie istnieje? Ja sie spotkałem, Clipper i Python.

Aha, jak w Javie posortować tablicę String w porządku alfabetycznym? Próbowałem metodą Arrarys.sort, i zgodnie z moimi przewidywaniami, nie da się.

Jest chyba oczywiste, że Arrays.sort sortuje wg porządku domyślnego, tzn. leksykograficznego. Jak chcesz sortować inaczej, to musisz do funkcji sort przekazać dwa argumenty: tablicę do
posortowania i "komparator" = obiekt opisujący kryterium porównywania.

0
bogdans napisał(a)

Czego nie widziałem, to nie istnieje? Ja sie spotkałem, Clipper i Python.

Nie mówię, że nie istnieje. I sama implementacja operatora >= w jakimś języku, to nie jest to samo co definicja relacji większości dla łańcuchów znaków. Moim zdaniem (to opinia, nie fakt), w ich przypadku taka relacja nie ma sensu. Tak samo jak nie miałaby sensu dla ludzi, bo mogłaby dotyczyć zarówno wagi, wzrostu, jak i np. IQ. I która wersja jest słuszna?

Jest chyba oczywiste, że Arrays.sort sortuje wg porządku domyślnego, tzn. leksykograficznego. Jak chcesz sortować inaczej, to musisz do funkcji sort przekazać dwa argumenty: tablicę do posortowania i "komparator" = obiekt opisujący kryterium porównywania.

A czy porządek alfabetyczny nie jest prządkiem leksykograficznym? Z punktu widzenia człowieka jest, to Java (.NET też) mają jakieś niezrozumiałe problemy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0