如何在忽略大小写的情况下按字母顺序排序?

     2023-02-25     115

关键词:

【中文标题】如何在忽略大小写的情况下按字母顺序排序?【英文标题】:How to sort alphabetically while ignoring case sensitive? 【发布时间】:2011-11-20 03:26:27 【问题描述】:

我有这个代码,但只适用于小写字母。我希望它在忽略大写字母的同时对列表进行排序..

package sortarray.com;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class SortArray extends Activity 
    ArrayList<String[]> matchedFruits = new ArrayList<String[]>();
    TextView selection;

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String fruits[] = new String[7];// Sorted array
        fruits[0] = "apple";
        fruits[1] = "apricot";
        fruits[2] = "banana";
        fruits[3] = "mango";
        fruits[4] = "melon";
        fruits[5] = "pineapple";
        fruits[6] = "peach";
        char currChar = fruits[0].charAt(0);// Get first char of first element

        boolean match = false;
        int len = fruits.length;
        List<String> tmp = new ArrayList<String>();

        for (int i = 1; i < len; i++) 
            Log.d("Comparing ", fruits[i].charAt(0) + "," + currChar);
            if (fruits[i].charAt(0) == currChar) 
                if (match == false)// new match?
                
                    match = true;// Reset search
                    tmp.clear();// clear existing items
                    tmp.add(fruits[i - 1]);
                    Log.d("Started new list ", fruits[i - 1]);
                 else 
                    tmp.add(fruits[i - 1]);
                    Log.d("Added to list ", fruits[i - 1]);
                
             else 
                match = false;
                tmp.add(fruits[i - 1]);
                matchedFruits.add(tmp.toArray(new String[tmp.size()]));// add to
                                                                        // final
                                                                        // list
                Log.d("Finished a list ", fruits[i - 1]);
                tmp.clear();// clear existing items

            
            currChar = fruits[i].charAt(0);

        
        tmp.add(fruits[len - 1]);
        matchedFruits.add(tmp.toArray(new String[tmp.size()]));// add left over
                                                                // items
        printList();
    

    void printList()
    
    //Print the list 
        TextView selection = (TextView) findViewById(R.id.tv);
        String mssg="";
    for(int i=0;i<matchedFruits.size();i++)
    
            String tmp2[]= matchedFruits.get(i);

            for (int j = 0; j < tmp2.length; j++) 
                //Log.d("Final list", "Array #" + i + "[" + j + "]," + tmp2[j]);
                mssg += tmp2[j].toString();

            
            //selection.setText("\n");
            selection.setText(mssg);

    
    

【问题讨论】:

你为什么不使用 sort() 之类的。像数组或集合那样? @jitender:你想做什么,能详细点吗? 我想按字典顺序对列表进行排序,同时忽略区分大小写的字母......即,如果我写 man 和 Mango,它们在排序后会一起出现在列表中。 我认为 jitender 正在寻找 自然排序 顺序,但我不知道为什么不使用 Collections.sort! @Tobiask...先生,我是初学者,所以对此有一点了解,请指导我如何使用它。 【参考方案1】:

您是否尝试在if(fruits[i].charAt(0) == currChar)char currChar = fruits[0].charAt(0) 语句中将字符串的第一个字符转换为小写?

【讨论】:

【参考方案2】:

非常不清楚您要做什么,但您可以像这样对列表进行排序:

List<String> fruits = new ArrayList<String>(7);

fruits.add("Pineapple");
fruits.add("apple");
fruits.add("apricot");
fruits.add("Banana");
fruits.add("mango");
fruits.add("melon");        
fruits.add("peach");

System.out.println("Unsorted: " + fruits);

Collections.sort(fruits, new Comparator<String>() 
    @Override
    public int compare(String o1, String o2)               
        return o1.compareToIgnoreCase(o2);
    
);

System.out.println("Sorted: " + fruits);

【讨论】:

先生,我想按字母顺序对列表进行排序..但是我的代码仅适用于小写单词它的作用是,它将大写单词打印在列表中。现在我想要的是按字母顺序对我的列表进行排序,而不考虑大小写。 您好先生,您能帮我解决这个问题吗..***.com/questions/7525851/… @David Caunt 好的,先生,我会自己解决的。【参考方案3】:

这是一个简单的 Java 示例,说明了最好的方法:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Sorter 
    String fruits[] = new String[7];
    List<String> lst;

    Sorter() 
        lst = new ArrayList<String>();
        // initialise UNSORTED array
        fruits[0] = "Melon"; fruits[1] = "apricot"; fruits[2] = "peach";
        fruits[3] = "mango"; fruits[4] = "Apple";   fruits[5] = "pineapple";
        fruits[6] = "banana";
    

    public static void main(String[] args) 
        Sorter srt = new Sorter();
        srt.anyOldUnstaticMethod();

    
    public void anyOldUnstaticMethod() 
        Collections.addAll(lst, fruits);
        System.out.println("Initial List");
        for (String s : lst)
            System.out.println(s);
        Collections.sort(lst);
        System.out.println("\nSorted List");
        for (String s : lst)
            System.out.println(s);
        Collections.sort(lst, new SortIgnoreCase());
        System.out.println("\nSorted Ignoring Case List");
        for (String s : lst)
            System.out.println(s);
    

    public class SortIgnoreCase implements Comparator<Object> 
        public int compare(Object o1, Object o2) 
            String s1 = (String) o1;
            String s2 = (String) o2;
            return s1.toLowerCase().compareTo(s2.toLowerCase());
        
    

【讨论】:

***.com/questions/203030/… 这要复杂得多。【参考方案4】:

我喜欢比较器类 SortIgnoreCase,但会使用它

public class SortIgnoreCase implements Comparator<String> 
    public int compare(String s1, String s2) 
        return s1.compareToIgnoreCase(s2);    // Cleaner :)
    

【讨论】:

为什么不在菱形运算符中使用 类型以避免强制转换为 String ? @ChristopheRoussy 没有理由,除了我当时没有想到或看到,也许……会更好。 java.lang.String.CASE_INSENSTIVE_ORDER 是预定义的。 docs.oracle.com/javase/7/docs/api/java/lang/…【参考方案5】:
Collections.sort(listToSort, String.CASE_INSENSITIVE_ORDER);

【讨论】:

您不必创建自己的不区分大小写的字符串比较器,只需使用 String.CASE_INSENSITIVE_ORDER(Java 1.2 起) 如果我想传递两个属性,比如不敏感的顺序和逆序呢? @LuisA.Florit 在这种情况下,您可能需要比较器。 值得注意的是,这将修改现有列表,因此列表需要是可变的。 也可以写成:theList.sort(String.CASE_INSENSITIVE_ORDER)【参考方案6】:

使用集合和 ArrayList 的示例:

开发一个实习生静态类,如示例“CompareStrings”。

在main方法中调用intern静态类。

简单易懂,效果很好!

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class MainClass 
    public static void main(String[] args) 
        ArrayList<String> myArray = new ArrayList<String>();
        myArray.add("zzz");
        myArray.add("xxx");
        myArray.add("Aaa");
        myArray.add("bb");
        myArray.add("BB");
        Collections.sort(myArray, new MainClass.CompareStrings());
        for(String s : myArray) 
            System.out.println(s);
        
    

    public static class CompareStrings implements Comparator<String> 
        @Override
        public int compare(String s1, String s2) 
           return s1.compareToIgnoreCase(s2);
        
    

【讨论】:

【参考方案7】:

在您的比较器工厂类中,执行以下操作:

 private static final Comparator<String> MYSTRING_COMPARATOR = new Comparator<String>() 
    @Override
    public int compare(String s1, String s2) 
      return s1.compareToIgnoreCase(s2);
    
  ;

  public static Comparator<String> getMyStringComparator() 
    return MYSTRING_COMPARATOR;

这使用不区分大小写的比较方法(为什么要自己编写)。这样您就可以像这样使用集合排序:

List<String> myArray = new ArrayList<String>();
//fill your array here    
Collections.sort(MyArray, MyComparators. getMyStringComparator());

【讨论】:

【参考方案8】:

我不敢相信没有人提到Collator。几乎所有这些答案都只适用于英语。

您几乎应该始终使用Collator for dictionary based sorting。

对于搜索英语的不区分大小写的整理器,您可以执行以下操作:

Collator usCollator = Collator.getInstance(Locale.US);
usCollator.setStrength(Collator.PRIMARY);
Collections.sort(listToSort, usCollator);

【讨论】:

【参考方案9】:

Collections.sort() 允许您传递自定义比较器进行排序。对于不区分大小写的排序,String 类提供了一个名为 CASE_INSENSITIVE_ORDER 的静态最终比较器。

所以在你的情况下,所有需要的是:

Collections.sort(caps, String.CASE_INSENSITIVE_ORDER);

【讨论】:

显然是最佳答案:)【参考方案10】:

java.text.Collator.getInstance() 传递给Collections.sort 方法;它将按字母顺序排序,同时忽略大小写。

        ArrayList<String> myArray = new ArrayList<String>();
        myArray.add("zzz");
        myArray.add("xxx");
        myArray.add("Aaa");
        myArray.add("bb");
        myArray.add("BB");
        Collections.sort(myArray,Collator.getInstance());

【讨论】:

【参考方案11】:

在您的情况下,您有一个 List 的字符串,并且大多数已经提出的解决方案(我特别喜欢 @guyblank 的答案)都很好,但是!!!,如果您有一个 List 的豆子,这是我的在这种情况下,您可以像这样在 bean 中使用 Comparable 接口:

public class UserBean implements Comparable<UserBean> 

   private String name;
   private String surname;        
   private Integer phone;

   // GETTERS AND SETTERS

   public int compareTo(UserBean bean) 
       return name.compareToIgnoreCase(bean.name);
   


那么你只需要创建你的ArrayList&lt;UserBean&gt; userBeanArray = new ArrayList&lt;UserBean&gt;();,填写并排序:Collections.sort(userBeanArray);

你已经完成了!

希望对社区有所帮助;-)

【讨论】:

【参考方案12】:

这是一个对数组进行排序的示例:不区分大小写

import java.text.Collator;
import java.util.Arrays;

public class Main 
  public static void main(String args[]) 

    String[] myArray = new String[]  "A", "B", "b" ;
    Arrays.sort(myArray, Collator.getInstance());

  System.out.println(Arrays.toString(myArray));

 


/* 输出:[A, b, B] */

【讨论】:

【参考方案13】:

从 Java 8 开始,您可以使用 Streams API 进行排序:

List<String> fruits = Arrays.asList("apple", "Apricot", "banana");

List<String> sortedFruit = fruits.stream()
      .sorted(String.CASE_INSENSITIVE_ORDER)
      .collect(Collectors.toList())

Collections.sort的不同之处在于,这将返回一个新列表,并且不会修改现有列表。

【讨论】:

【参考方案14】:

你可以像这样直接调用列表中默认的sort方法:

myList.sort(String.CASE_INSENSITIVE_ORDER); // reads as the problem statement and cleaner

或:

myList.sort(String::compareToIgnoreCase);  // reads as the problem statement and cleaner

【讨论】:

【参考方案15】:

Java 8 Way 中的数组排序-> Easy peasy lemon squeezy

String[] names = "Alexis", "Tim", "Kyleen", "KRISTY";

  Arrays.sort(names, String::compareToIgnoreCase);

我使用的方法参考String::compareToIgnoreCase

【讨论】:

java示例代码_按字母顺序排序,忽略区分大小写

java示例代码_按字母顺序排序,忽略区分大小写 查看详情

有没有办法在不安装包的情况下按字母顺序排列 package.json?

】有没有办法在不安装包的情况下按字母顺序排列package.json?【英文标题】:Isthereawaytoalphabetizepackage.jsonwithoutinstallingapackage?【发布时间】:2016-03-3001:16:19【问题描述】:我一直在研究许多旧的npm包,它们的依赖关系都乱了套。... 查看详情

如何在没有递归或堆栈但使用父指针的情况下按顺序遍历 BST?

】如何在没有递归或堆栈但使用父指针的情况下按顺序遍历BST?【英文标题】:Howtodoin-ordertraversalofaBSTwithoutrecursionorstackbutusingparentpointers?【发布时间】:2012-05-0910:53:53【问题描述】:是否可以在不使用visited标志或stack的情况下... 查看详情

如何按字母顺序对字符串数组进行排序(区分大小写,非标准排序规则)

】如何按字母顺序对字符串数组进行排序(区分大小写,非标准排序规则)【英文标题】:Howtosortanarrayofstringalphabetically(casesensitive,nonstandardcollation)【发布时间】:2012-09-2017:39:11【问题描述】:我需要一个c语言代码来对一些字符... 查看详情

R:如何在不使用循环的情况下按唯一向量顺序查找所有重复向量值的索引?

】R:如何在不使用循环的情况下按唯一向量顺序查找所有重复向量值的索引?【英文标题】:R:howtofindindexofallrepetitionvectorvaluesorderbyuniquevectorwithoutusingloop?【发布时间】:2016-06-3016:08:26【问题描述】:我有一个这样的整数向量:a... 查看详情

按字母顺序排序时忽略变音符号

】按字母顺序排序时忽略变音符号【英文标题】:Ignoringdiacriticswhenorderingalphabetically【发布时间】:2011-04-0614:14:05【问题描述】:我正在制作一个Java应用程序,它从SQLite接收一些名称并将它们放在一个列表框中。问题是我希望它... 查看详情

如何按字母顺序对 QTableView 中的项目进行排序

】如何按字母顺序对QTableView中的项目进行排序【英文标题】:HowcanisortitemsinaQTableViewinalphabeticorder【发布时间】:2018-02-1603:35:41【问题描述】:我想按字母顺序对QTableView中的项目进行排序。我已经搜索了互联网,但一切都在脉络... 查看详情

如何在默认情况下按顺序播放视频列表,而无需单击下一步按钮,使用 react native cli 从设备的本地文件访问

】如何在默认情况下按顺序播放视频列表,而无需单击下一步按钮,使用reactnativecli从设备的本地文件访问【英文标题】:Howtoplaylistofvideossequentiallybydefaultwithoutclickingnextbuttonaccessingfromlocalfilesofthedeviceusingreactnativecli【发布时间】... 查看详情

排序(字母顺序)以忽略空单元格:dataTables

】排序(字母顺序)以忽略空单元格:dataTables【英文标题】:Sorting(alphabeticalorder)toignoreemptycells:dataTables【发布时间】:2014-11-1416:39:23【问题描述】:所以这个问题已经被问到here,但是这个解决方案对我不起作用(我可能做错了... 查看详情

linuxsort命令参数及用法详解

...rt命令的语法格式:sort[参数][文件]Linuxsort命令参数:-b:忽略每行前面开始出的空格符号。-c:检查文件是否已经按照顺序排序。-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符。-f:排序时,将小写字母视为大... 查看详情

忽略字母大小写情况下统计字符出现的次数(代码片段)

packagelsh.element.algrithom;importjava.util.Scanner;publicclassCountLetterIgnoreCasepublicstaticvoidmain(String[]args)Scannerinput=newScanner(System.in);System.out.println("请输入带有字母的字符串:");Stringstr 查看详情

我们可以在不使用 O(n) 中的队列的情况下按顺序打印二叉搜索树吗?

】我们可以在不使用O(n)中的队列的情况下按顺序打印二叉搜索树吗?【英文标题】:CanwelevelorderprintabinarysearchtreewithoutusingaqueueinO(n)?【发布时间】:2015-06-1615:14:24【问题描述】:我们可以在不使用O(n)时间复杂度的队列的情况下... 查看详情

如何在R中按字母顺序排序?

】如何在R中按字母顺序排序?【英文标题】:HowtosortalphabeticallyinR?【发布时间】:2014-04-1818:34:23【问题描述】:我的文件格式为:ada1ada2ada3....ada10ada11ada12不幸的是,当我写出a10时,a11和a12出现在a2之前。你能帮我按字母顺序排... 查看详情

文件排序合并

...针对文本文件的内容,以行为单位来排序。參  数:-b忽略每行前面開始出的空格字符。-c检查文件是否已经依照顺序排序。-f排序时。忽略大写和小写字母。-M将前面3个字母按照月份的缩写进行排序。-n按照数值的大小排序。-... 查看详情

如何在 Excel 中按字母顺序对行进行排序,而不包括排序中的所有列?

】如何在Excel中按字母顺序对行进行排序,而不包括排序中的所有列?【英文标题】:HowcanIsortrowsinExcelalphabetically,withoutincludingallcolumnsinthesort?【发布时间】:2015-01-0700:21:35【问题描述】:尝试按行的字母顺序对Excel中的数据进行... 查看详情

如何在pyspark中按字母顺序对嵌套结构的列进行排序?

】如何在pyspark中按字母顺序对嵌套结构的列进行排序?【英文标题】:Howtosortcolumnsofnestedstructsalphabeticallyinpyspark?【发布时间】:2019-09-0611:54:25【问题描述】:我有以下架构的数据。我希望所有的列都应该按字母顺序排序。我想... 查看详情

如何在忽略大小写的情况下比较字符串

】如何在忽略大小写的情况下比较字符串【英文标题】:Howtocomparestringsignoringthecase【发布时间】:2011-02-2003:09:54【问题描述】:我希望apple和Apple比较为true。目前"Apple"=="Apple"#returnsTRUE"Apple"=="APPLE"#returnsFALSE【问题讨论】:【参考... 查看详情

java示例代码_排序:如何创建特定的自定义顺序,然后在java中按字母排序

java示例代码_排序:如何创建特定的自定义顺序,然后在java中按字母排序 查看详情