-7

如何根据java中包含的数字字符对单词进行排序?例如

String Given : "my name is dhana"
O/p should be : "dhana name my is"
4

5 回答 5

2
  • 拿一个string

  • split它按空格(成词)

  • 转换arrayArrayList

  • comparator以您想要的方式创建自定义sort(此处由length

于 2013-08-25T09:36:50.350 回答
2

用这个

  public void func()
        {
        String input =  "my name is dhana";
        String input_array[] = input.split(" ");
        Collections.sort(input_array, new CustomComparator());
        print_Array(input_array);
       }

CustomComparator.java

public class CustomComparator implements Comparator<String>
   {
      public int compare(String a, String b) {  
      if (a.length() > b.length()) {
         return -1;
      } else if (a.length() < b.length()) {
         return 1;
      }
      return a.compareTo(b);
    }
}
于 2013-08-25T09:42:34.033 回答
1

您可以使用Comparator首先按长度进行比较,如果长度相同,请使用String.compareTo().

于 2013-08-25T09:37:49.940 回答
0

这是一种不需要创建自定义Comparator. 我只是为了完整性而提出它。

  1. 将字符串拆分为单词。
  2. 创建一个排序地图。
  3. 迭代单词列表。
  4. 用 "%03d%05d".format(999-aWord.length(),i) -> aWord 填充它,其中 i 是单词列表中 aWord 的索引。这里,键的形式是xxxyyyyy,其中xxx是字长的倒数(998 表示 l=1,997 表示 l=2 等),所以如果从最长到最短排序,yyyyy允许区分相同的长度(以及相同单词的多次出现)。
  5. 结果是 Map.values()。
String input= "This is a string with differently sized words. This is another sentence." ;
String[] splitInput= input.split("[ .]") ;
TreeMap<String,String> theMap= new TreeMap<String,String>() ;
int index= 0 ;
for(String word: splitInput ) {
    if( word.length() > 0 ) {
        String key= String.format("%03d%05d",(999-word.length()),index) ;
        theMap.put(key,word);
        index++;
    }
}
System.out.println(theMap.values());

产生输出:

[differently, sentence, another, string, sized, words, This, with, This, is, is, a]

, 哪个是对的。实际上,String相同大小的 s 是按位置列出的input

于 2013-08-25T09:44:15.637 回答
0

您的问题的解决方案可以是在拆分时使用正则表达式:

    String str = "my name is dhana";
    List<String> items = Arrays.asList(str.split("\\s+"));

    print(items);

    Collections.sort(items, new Comparator<String>() {

            @Override
            public int compare(String s0, String s1) {
                            // Descending order
                if (s0.length() < s1.length())
                    return 1;
                else if (s0.length() > s1.length())
                    return -1;
                return 0;
            }

        });


    String descOrderedString = "";
    for (String item : items) {
        descOrderedString += item + " ";
    }

    System.out.println(descOrderedString);

该方法print()可以是这样的:

public void print(List<String> list) {
    for(String s: list){
        System.out.println(s);
    } 
}

输出:

因为print(items)是:

my
name
is
dhana

因为System.out.println(descOrderedString)是:

dhana name my is 
于 2013-08-25T09:50:34.427 回答