Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка a-Z, массив строк 
V
    Опции темы
DEER
Дата 21.12.2009, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



Всем привет!
Такой вот ламерский вопрос smile как так отсортировать массив строк?
проблема в том, что большие буквы имеют приоритет над маленькими. Как это победить, кроме как делать собственную таблицу??
Подскажите плиз smile


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
Kangaroo
Дата 21.12.2009, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Как-то так:
Код

String[] stringArr = new String[] {"test", "teeeest", "t1", "Test"};
        
        Arrays.sort(stringArr, new Comparator<String>() {
            @Override
            public int compare(String s1, String s2) {
                return s1.compareToIgnoreCase(s2);
            }
        });
        
        System.out.println(Arrays.toString(stringArr));



--------------------
Lost....
PM MAIL MSN   Вверх
DEER
Дата 21.12.2009, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



неа.
Он будет сортировать массив 
Код

aa bb Aa ee

так
Код

aa Aa bb ee

а надо так
Код

aa bb ee Aa


вобщем проблема у меня в том, что
Код

s1.compareTo(s2);

считает, что 'A' должна идти первее чем 'a'
со сравнением букв можно было было использовать таблицу, где описаны буквы и их индексы, конечно не лучшее решение, но работало бы. но тут строки. Если такой велосипед изобретать, то не похоже это на "тестовое задание"
в инете ничего не нашел... не понимает язык запросов разницу между большими и маленькими буквами....


Это сообщение отредактировал(а) DEER - 21.12.2009, 23:07


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
dobrolub
Дата 21.12.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



если стринги с английскими только буквами то попробуй использовать для сортировки компаратор 
java.lang.String.CASE_INSENSITIVE_ORDER

Collections.sort(mystringarray, String.CASE_INSENSITIVE_ORDER);

если с русскими или другими, то посмотри на 

java.text.Collator.
PM   Вверх
DEER
Дата 21.12.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



спасибо. попробую! только латиница и цыфры


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
DEER
Дата 22.12.2009, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



он ведет себя как и обычный компаратор 
Код

       Collections.sort(elements2, new Comparator<String>() {
               public int compare(String a, String b) {
                   return a.compareTo(b);
               }
           }
       );

результат A-Za-z

надо как то поменять a-zA-Z  smile 


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
Kangaroo
Дата 22.12.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Цитата(DEER @  21.12.2009,  23:06 Найти цитируемый пост)
а надо так

Ага, точно.

Ну тогда сравнивай посимвольно. Можешь взять из Стринга метод и переделать его под свою задачу.


--------------------
Lost....
PM MAIL MSN   Вверх
dobrolub
Дата 22.12.2009, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



smile свой надо писать похоже... интересная задача.

Это сообщение отредактировал(а) dobrolub - 22.12.2009, 01:05
PM   Вверх
DEER
Дата 22.12.2009, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



Самое интересное - это маленький кусочек от задания на час  smile 
вопрос по ходу закрыт


--------------------
 
PM MAIL WWW ICQ MSN   Вверх
4EJIOBEK
Дата 22.12.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 26.3.2007

Репутация: нет
Всего: 4



хоть вопрос и закрыт, как подсказывал  dobrolub, лучше в таком случае использовать Collator

доки http://java.sun.com/j2se/1.5.0/docs/api/ja...t/Collator.html
пример в конце статьи http://javagu.ru/portal/dt?last=false&...U_SECTION_63111

Это сообщение отредактировал(а) 4EJIOBEK - 22.12.2009, 10:30
PM MAIL ICQ   Вверх
DEER
Дата 22.12.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 749
Регистрация: 12.4.2005
Где: г. Рязань

Репутация: нет
Всего: 13



Во какой  изврат получился. может кому пригодиться:
Код

    public void run(){
       for(int i=0; i<elems.length; i++) {
           for(int j=0; j<elems.length; j++) {
               System.out.println("Thread 1. Сравниваю "+elems[i]+" и "+elems[j]);
               if( Compare(elems[i], elems[j])>0 ) {
                   String tmp = elems[i];
                   elems[i] = elems[j];
                   elems[j] = tmp;
               }
           }
       }
       System.out.println("Thread 1 завершил работу");
   }
    private int Compare(String o1, String o2)
    {
      boolean is_first_number = false;
      boolean is_second_number = false;

      double do1 = 0;
      double do2 = 0;
      try {
          do1 = Double.parseDouble(o1);
          is_first_number = true;
      } catch(Exception e) {}
      try {
          do2 = Double.parseDouble(o2);
          is_second_number = true;
      } catch(Exception e) {}
      if( is_first_number && is_second_number ) {
          return -1*Double.compare(do1, do2);
      }
      else if( is_first_number && !is_second_number ) {
          return -1;
      }
      else if( !is_first_number && is_second_number ) {
          return 1;
      }
      else {
          return Worker.CompareTwoString(o1, o2);
      }
    }


Worker.CompareTwoString
Код

      public static int CompareTwoString(String o1, String o2)
      {
//          if(o1.length() != o2.length()) {
//              return o1.length() - o2.length();
//          }
//          else {
              char[] a = o1.toCharArray();
              char[] b = o2.toCharArray();
              int len = a.length > b.length ? b.length : a.length;
              for(int i=0; i<len; i++) {
                  if( Character.isUpperCase(a[i]) && !Character.isUpperCase(b[i]) ) {
                      return -1;
                  }
                  else if( !Character.isUpperCase(a[i]) && Character.isUpperCase(b[i]) ) {
                      return 1;
                  } 
                  else {
                      return a[i] < b[i] ? 1 : -1;
                  }
              }
//          }
          return 1;
      }



--------------------
 
PM MAIL WWW ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1094 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.