在Java中按升序1,2,4,5,8,9,13对字符串“13,5,8,4,2,1,9”进行排序

时间:2010-03-30 07:07:49

标签: java sorting

如何按升序对字符串"13,5,8,4,2,1,9"进行排序,以获取1,2,4,5,8,9,13

13 个答案:

答案 0 :(得分:27)

  • 用逗号分隔字符串
  • 将每个子字符串解析为整数
  • 对生成的集合进行排序
  • 如果您需要将结果作为字符串(不清楚),请将每个整数转换回字符串并将其与逗号连接在一起。

如果这些步骤中的任何一个导致您遇到困难,请更具体。

答案 1 :(得分:14)

  1. 将其拆分为包含String.split()的项目数组。
  2. 使用Integer.valueOf()转换为数字数组。
  3. 对数组进行排序。
  4. 将它全部连接回StringBuilder

答案 2 :(得分:8)

作为一个班轮,使用Google Collections(根据Kevin的建议更新)

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);
                }}))));

答案 3 :(得分:6)

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("[\\[ \\]]", "");

此解决方案使用:

答案 4 :(得分:3)

我会使用StringTokenizer来标记字符串,
解析值(使用Integer.parseInt),
然后使用Arrays.sort对结果进行排序 最后,重新创建字符串。

答案 5 :(得分:2)

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();

可能会有一些拼写错误,但我认为不是。另外,自己添加适当的导入=)

答案 6 :(得分:1)

所以你有一个包含逗号分隔的整数集的字符串,你需要排序然后输出到字符串?尝试split - 字符串,parse - 整数,sort - 生成的数组,然后join - 将结果放在一起

答案 7 :(得分:0)

好的,你可以尝试一下它在所有情况下的工作。

package com.java;


import java.util.*;

public class cd
{      
  public static void main(String s[])
  {  
        Collections col;
        List l = sort(s);

        System.out.println("\nStrings sorted List ...");
        for(int i = 0; i < s.length; i++)
        {
              System.out.println((String)l.get(i));
        }

        int ints[] = {
                                719, 2, -22, 401, 6
                                };

        Integer in[] = new Integer[ints.length];            
        for(int i = 0; i < in.length; i++)
        {
              in[i] = new Integer(ints[i]);
        }

        l = sort(in);
        System.out.println("\nIntegers sorted List ...");

        for(int i = 0; i < in.length; i++)
        {
              System.out.println((Integer)l.get(i));
        }
}

public static List sort(Object o[])
{
        ArrayList al = new ArrayList();
        for(int i = 0; i < o.length; i++)
        al.add(i, o[i]);
        List list = Collections.synchronizedList(al);
        Collections.sort(list);
        return list;
}

}

答案 8 :(得分:0)

使用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 );
    }
}

答案 9 :(得分:0)

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]

这个想法与Jon Skeet的解释相同。

答案 10 :(得分:-1)

这是排序的一种方法。

package com.java;


import java.util.ArrayList;

import java.util.Collections;


public class b{

public static void main(String[] args) {
//create an ArrayList object

ArrayList arrayList = new ArrayList();


//Add elements to Arraylist

arrayList.add("9");
arrayList.add("3");
arrayList.add("5");
arrayList.add("2");
arrayList.add("4");

Collections.sort(arrayList);


//display elements of ArrayList

System.out.println("ArrayList elements after sorting in ascending order : ");

for(int i=0; i<arrayList.size(); i++)

System.out.println(arrayList.get(i));



}

}

答案 11 :(得分:-1)

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);
    }
  }
}

答案 12 :(得分:-2)

Bash太强大了:-)

数字=“1,2,9,4,7,5”;对于$中的数字(echo“$ numbers”);回声“$ number”| tr -d“,”;完成|排序| tr“\ n”“,”; echo“”