Results 1 to 5 of 5
Thread: Sort in Cyrilic order
- 04-21-2010, 10:36 AM #1
Senior Member
- Join Date
- Apr 2010
- Location
- Belgrade, Serbia
- Posts
- 278
- Rep Power
- 4
Sort in Cyrilic order
Hi. I've written a comparator for cyrilic sort.
Problem is when I try to compare words its happend that for example
words with first letter "J" are before words with first letter "A".
What's wrong with my code?
If, already exist comparator for cyrilic sort, please tell me about it, or
if there is any other way to sort words in cyrilic order, explain me how it
can be done.
Java Code:import java.util.Comparator; class MyComparator implements Comparator<String> { private String cyrilic = "АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш"; private static final int NUMBER_OF_CYRILIC_LETTERS = 60; public int compare(String word1, String word2) { String firstWord, secondWord; String shorterWord, longerWord; int shorterFirstWord = -1; firstWord = word1; secondWord = word2; if(firstWord.length() < secondWord.length()) { shorterWord = firstWord; longerWord = secondWord; shorterFirstWord = -1; } else { shorterWord = secondWord; longerWord = firstWord; shorterFirstWord = 1; } if(shorterWord.equals(longerWord.substring(0, shorterWord.length()-1))) { return shorterFirstWord; } for(int i = 0; i < shorterWord.length(); i++) { for(int j = 0; j < NUMBER_OF_CYRILIC_LETTERS; j++) { if((firstWord.charAt(i) == cyrilic.charAt(j)) && (secondWord.charAt(i) != cyrilic.charAt(j))) return -1; else if ((firstWord.charAt(i) != cyrilic.charAt(j)) && (secondWord.charAt(i) == cyrilic.charAt(j))) return 1; else return 0; } } return 0; } public boolean equals(Object obj) { String rec = (String)obj; if(rec.equals(this)) return true; return false; } }
- 04-21-2010, 12:04 PM #2
Moderator
- Join Date
- Apr 2009
- Posts
- 10,460
- Rep Power
- 16
You don't need to loop through the cyrilic list. Just use indexOf(word.charAt(i)). That'll tell you the position, and if that position for the first word is less than the one for the second word then the first word is earlier so you can return -1, else if it's greater then reurn 1, else you keep looping.
All those other charAt's are probably confusing the situation.
- 04-21-2010, 12:39 PM #3
Senior Member
- Join Date
- Apr 2010
- Location
- Belgrade, Serbia
- Posts
- 278
- Rep Power
- 4
Thank you for the suggestion.
I have optimized code:
change that:
with that:Java Code:for(int i = 0; i < shorterWord.length(); i++) { for(int j = 0; j < NUMBER_OF_CYRILIC_LETTERS; j++) { if((firstWord.charAt(i) == cyrilic.charAt(j)) && (secondWord.charAt(i) != cyrilic.charAt(j))) return -1; else if ((firstWord.charAt(i) != cyrilic.charAt(j)) && (secondWord.charAt(i) == cyrilic.charAt(j))) return 1; else return 0; } } return 0;
And result is the same, as before.Java Code:for(int i = 0; i < shorterWord.length(); i++) if(firstWord.indexOf(cyrilic.charAt(i)) < secondWord.indexOf(cyrilic.charAt(i))) return -1; else return 1;
- 04-21-2010, 01:17 PM #4
Senior Member
- Join Date
- Apr 2010
- Location
- Belgrade, Serbia
- Posts
- 278
- Rep Power
- 4
I'll post complete code so it could be more obvious
what I'm writing.
class InsertWords
Second class it's already have been posted on the begining of the thread.Java Code:import java.util.TreeSet; import java.util.Iterator; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class InsertWords { TreeSet<String> allWords = new TreeSet<String>(); String currentWord; public TreeSet<String> insertAllWordsInSet(String fileName) throws IOException { BufferedReader bufferedReader = new BufferedReader(new FileReader(fileName)); String lineOfText = null; while((lineOfText = bufferedReader.readLine()) != null) { // Regular expression that keeps only cyrilic letters and spaces lineOfText = lineOfText.replaceAll("[^АаБбВвГгДдЂђЕеЖжЗзИиЈјКкЛлЉљМмНнЊњОоПпРрСсТтЋћУуФфХхЦцЧчЏџШш ]", ""); String[] allWordsInLine = lineOfText.split(" "); for(int i = 0; i < allWordsInLine.length; i++) { allWords.add(allWordsInLine[i]); } } bufferedReader.close(); return allWords; } public void toString(TreeSet<String> wordsInSet) { for(String word : wordsInSet) System.out.println(word); } public static void main(String[] args) { InsertWords words = new InsertWords(); TreeSet<String> setOfWords = new TreeSet<String>(); try { setOfWords = words.insertAllWordsInSet("myFile.txt"); words.toString(setOfWords); System.out.println(); } catch (IOException izuzetak) { System.err.print("File is missing"); } } }
myFile.txt contains text:
Из Википедије, слободне енциклопедије
За друго значење, погледајте чланак Тигар (вишезначна одредница).
Тигар
Бенгалски тигар (P. tigris tigris)
Систематика
царство: Animalia
тип: Chordata
класа: Mammalia
ред: Carnivora
породица: Felidae
род: Panthera
Биномијална номенклатура
Panthera tigris
(Linnaeus, 1758)
Екологија таксона
Тигар (Panthera tigris) је сисари из породице мачака (Felidae) и један од четири врсте „великих мачака“ рода Panthera. Он је врхунски предатор и највећа жива мачка на свету. Бенгалски тигар је најпознатија подврста и сачињава приближно 80% укупне популације тигрова. Живи у Бангладешу, Бутану, Мјанмару, Непалу и Индији. Као угрожене врсте, већина светских тигрова данас живи у заточеништву.
Садржај [сакриј]
1 Физичке особине
2 Угроженост
3 Подврсте
4 Спољашње везе
[уреди]Физичке особине
Женка тигра, са младунчетом.
Тигрови су најтеже мачке у природи. Иако се свака подврста разликује, генерално, мужјаци тигрова теже између 120 и 250 килограма, а женке између 90 и 150 килограма. Просечно мужјаци су дугачки између 2.4 и 3.2 метара, док су женке између 2.1 и 2.75 метара дугачке. Суматрански тигрови су најмањи од свих тигрова, док су сибирски тигрови највећи.
[уреди]Угроженост
Почетком 19. века постојало је 100.000 тигрова. Данас се тај број значајно променио. У свету живи негде између 5.000 и 7.000 тигрова. Најугроженији је јужнокинески тигар. У свету их има мање од 100. Претеран криволов, уништавање станишта итд. довело је тигра на границу опстанка.
[уреди]Подврсте
Постоји осам подврста тигра:
Бенгалски тигар
Индокинески тигар
Суматрански тигар
Сибирски тигар
Јужнокинески тигар
Изумрле подврсте:
Јавански тигар
Каспијски тигар или Персијски тигар
Балијски тигар
[уреди]Спољашње везеLast edited by cselic; 04-21-2010 at 01:22 PM.
- 04-21-2010, 02:03 PM #5
Moderator
- Join Date
- Apr 2009
- Posts
- 10,460
- Rep Power
- 16
Similar Threads
-
How to order a vector?
By tyang in forum New To JavaReplies: 2Last Post: 02-06-2010, 08:24 AM -
Using Merge Sort to sort an ArrayList of Strings
By coldfire in forum New To JavaReplies: 3Last Post: 03-13-2009, 01:03 AM -
How to sort array objects into alphabetical order...
By lisalala in forum New To JavaReplies: 5Last Post: 03-03-2009, 11:01 AM -
Descending order
By santanu in forum New To JavaReplies: 1Last Post: 11-04-2008, 04:33 PM -
How to sort a list using Bubble sort algorithm
By Java Tip in forum AlgorithmsReplies: 3Last Post: 04-29-2008, 08:04 PM


LinkBack URL
About LinkBacks
Reply With Quote

Bookmarks