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

根据java中包含的数字字符对单词进行排序,java,string,sorting,Java,String,Sorting,如何根据java中包含的数字字符对单词进行排序?? e、 g 拿绳子 用空格把它分成几个字 将数组转换为ArrayList 创建自定义比较器以按长度在此处按所需方式排序 您可以使用哪个先按长度进行比较,如果长度相同,则使用字符串。compareTo。使用此 public void func() { String input = "my name is dhana"; String input_array[] = input.split(" "

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

拿绳子

用空格把它分成几个字

将数组转换为ArrayList

创建自定义比较器以按长度在此处按所需方式排序

您可以使用哪个先按长度进行比较,如果长度相同,则使用字符串。compareTo。

使用此

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


这是一种不需要创建自定义比较器的替代方法。我提出这个建议只是为了完整

将字符串拆分为单词。 创建一个分类地图。 迭代单词列表。 用%03d%05d.format999 aWord.length,i->aWord填充它,其中i是单词列表中aWord的索引。在这里,键的形式是xxxyyyy,其中xxx是单词长度998(表示l=1)的倒数,997(表示l=2)的倒数,因此从最长到最短排序if,yyyy允许区分相同长度的单词以及相同单词的多次出现。 结果是映射值。
,这是正确的。事实上,相同大小的字符串在输入中按位置列出。

解决问题的方法是在拆分时使用正则表达式:

    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);
输出:

对于打印项目:

对于System.out.printlndescOrderedString:


你试过在谷歌上搜索主题“按长度排序java字符串”吗?到目前为止你都尝试了什么?好的,继续。如果你在这里插入了where.downvote,请回来?有趣…无需将其转换为列表,数组也可以轻松排序…您的CustomComparator编码如下,将按升序而不是降序对列表进行排序。感谢通知我:我已更改。错误:线程main java.lang.NullPointerException中的异常
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);
    }
}
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 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);
public void print(List<String> list) {
    for(String s: list){
        System.out.println(s);
    } 
}
my
name
is
dhana
dhana name my is