Сортировать строку «13,5,8,4,2,1,9» в порядке возрастания 1,2,4,5,8,9,13 на Java - PullRequest
14 голосов
/ 30 марта 2010

Как мне отсортировать строку "13,5,8,4,2,1,9" в порядке возрастания, чтобы получить 1,2,4,5,8,9,13?

Ответы [ 13 ]

27 голосов
/ 30 марта 2010
  • Разделить строку запятыми
  • Разобрать каждую подстроку в целое число
  • Сортировка полученной коллекции
  • Если вам нужен результат в виде строки (неясно), преобразуйте каждое целое число обратно в строку и объедините их вместе запятыми.

Если какой-либо из этих шагов вызывает у вас трудности, пожалуйста, уточните.

14 голосов
/ 30 марта 2010
  1. Разделите его на массив элементов с помощью String.split().
  2. Преобразовать в массив чисел с помощью Integer.valueOf().
  3. Сортировка массива.
  4. Объедините все это обратно в StringBuilder.
8 голосов
/ 30 марта 2010

Как один лайнер, используя Google Collections (обновлено по предложению Кевина)

Joiner.on(",").join(Ordering.natural().onResultOf(new Function<String, Integer>() {
    @Override
    public Integer apply(String from) {
        return Integer.valueOf(from);
    }
}).sortedCopy(Arrays.asList("4,2,7,9,1".split(","))));
  • Разделить, используя String.split()
  • Преобразовать в Integer, используя Function (кто-нибудь знает, есть ли где-нибудь константа для этого?)
  • Сортировка с использованием TreeSet и естественный порядок
  • Соедините детали и преобразуйте обратно в String, используя Joiner

(старая версия)

Joiner.on(',').join(
    Sets.newTreeSet(
        Iterables.transform(
            Arrays.asList("13,5,8,4,2,1,9".split(",")),
            new Function<String, Integer>() {
                @Override
                public Integer apply(String from) {
                    return Integer.parseInt(from);
                }}))));
6 голосов
/ 30 марта 2010
String s = "13,5,8,4,2,1,9";
String[] arr = s.split(",");
Arrays.sort(arr, new Comparator<String>() {
   @Override public int compare(String s1, String s2) {
      return Integer.parseInt(s1) - Integer.parseInt(s2);
   }
});
s = Arrays.toString(arr).replaceAll("[\\[ \\]]", "");

Это решение использует:

3 голосов
/ 30 марта 2010

Я бы токенизировал строку, используя StringTokenizer,
разбирать значения (используя Integer.parseInt),
затем отсортируйте результаты, используя Arrays.sort.
Наконец, заново создайте строку.

2 голосов
/ 30 марта 2010
String str = "13,5,8,4,2,1,9";
StringTokenizer tokens = new StringTokenizer(", ");
ArrayList<Integer> ints = new ArrayList<Integer>();
for(String token: tokens)
   ints.add(Integer.parseInt(token));

Collection.sort(ints);
String sortedStr = "";
for(int i = 0; i + 1 < ints.size(); ++i)
   sortedStr += ints.get(i) + ", ";
if (ints.size() > 0)
   sortedStr += ints.lastElement();

Может быть, есть орфографические ошибки, но я думаю, что нет. Также добавьте соответствующий импорт самостоятельно =)

1 голос
/ 30 марта 2010

Итак, у вас есть строка, содержащая набор целых чисел, разделенных запятыми, которые нужно отсортировать и затем вывести в строку? Попробуйте split - строку, parse - целые числа, sort - полученный массив, а затем join - результаты вместе

0 голосов
/ 16 августа 2018

Java 8 +

Если вы используете Java 8, вы можете использовать потоки для сортировки следующим образом:

String str = "13,5,8,4,2,1,9";
String sortedString =
        Arrays.stream(str.split(","))             //split with ','
                .map(Integer::valueOf)            //convert your strings to ints
                .sorted()                         //sort 
                .map(String::valueOf)             //convert them back to string
                .collect(Collectors.joining(","));//1,2,4,5,8,9,13

Если вы хотите отсортированный массив, вы также можете использовать:

Integer[] sortedInts =
        Arrays.stream(str.split(","))    //split with ','
                .map(Integer::valueOf)   //convert your strings to ints
                .sorted()                //sort
                .toArray(Integer[]::new);//[1, 2, 4, 5, 8, 9, 13]

Идея такая же, как у Джон Скит объяснение.

0 голосов
/ 25 мая 2013
class SplitStr
{
  public static void main(String args[])
  {
    try
    {
      String str=args[0]+","+args[1];    //marge two string in one
      String sArr[]=str.split(",");
      int slen=sArr.length;
      int iArr[]=new int[slen];
      int temp;
      for(int i=0;i<slen;i++)
      {
       iArr[i]=Integer.parseInt(sArr[i]);   //convert String into integer array

      }
      for(int i=0;i<slen;i++)
      {
        for(int j=i+1;j<slen;j++)
        {
          if(iArr[i]>=iArr[j])
          {
            temp=iArr[i];
            iArr[i]=iArr[j];
            iArr[j]=temp;
          }
        }
      }
      for(int i=0;i<slen;i++)
      {
        System.out.println(" "+iArr[i]);
      }
    }
    catch(Exception e)
    {
      System.out.println("input error "+e);
    }
  }
}
0 голосов
/ 06 апреля 2010

Альтернативное использование java.util.Scanner

public class SortString {
    public static void main( String [] args ) {
        // Read integers using Scanner...
        Scanner scanner = new Scanner( "13,5,8,4,2,1,9" ).useDelimiter(",");

        // Put them in a Integer list
        List<Integer> list = new ArrayList<Integer>();
        while( scanner.hasNextInt() ){
            list.add( scanner.nextInt() );
        }
        // And sort it
        Collections.sort( list );
        System.out.println( list );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...