Comment faire pour trier par ordre alphabétique tout en ignorant la casse?
J'ai ce code, mais ne fonctionne que pour les lettres minuscules. Je veux ce pour trier la liste en ignorant les lettres majuscules..
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);
}
}
}
- Pourquoi ne pas vous utiliser sort() ou qqch. comme pour les tableaux et les collections?
- Que voulez-vous faire, serait de vous expliquer..?
- je veux trier une liste dans l'ordre alphabétique sans tenir compte de la casse des lettres...j'.e si j'écris l'homme et de la Mangue ils se réunissent dans la liste après le tri.
- Je pense que jitender est à la recherche d'un naturel l'ordre de tri et je n'ai aucune idée de pourquoi Collections.trier n'est pas utilisé!
- je suis un débutant donc avoir une petite idée à ce sujet ,veuillez me guider comment les utiliser.
- David Caunt monsieur, je suis un débutant et n'avez aucune idée de comment utiliser des Collections.tri
Vous devez vous connecter pour publier un commentaire.
Voici un simple exemple java de la meilleure façon de le faire:
Il est très sait pas ce que vous essayez de faire, mais vous pouvez trier une liste comme ceci:
Collections.sort()
vous permet de passer en paramètre le comparateur de commande. Pour la casse de la commandeString
classe fournit un static final comparateur appeléCASE_INSENSITIVE_ORDER
.Si dans votre cas, tout ce qui est nécessaire est:
Je ne peux pas croire que personne n'a fait référence à la Collateur. Presque toutes ces réponses ne fonctionne que pour la langue anglaise.
Vous devriez toujours utiliser un Collateur de pour dictionnaire de tri.
Pour la casse collateur de la recherche de la langue anglaise, vous effectuez les opérations suivantes:
J'aime le comparateur de classe
SortIgnoreCase
, mais aurait utilisé cettePasser
java.text.Collator.getInstance()
àCollections.sort
méthode ; il va trier par ordre Alphabétique tout en ignorant la casse.Dans votre comparateur de classe factory, faire quelque chose comme ceci:
Il utilise la comparer à la méthode qui est insensible à la casse (pourquoi écrire votre propre). De cette façon, vous pouvez utiliser des Collections de tri comme ceci:
Depuis Java 8, vous pouvez trier en utilisant l'API de Flux:
La différence avec
Collections.sort
est que cela retourne une nouvelle liste et de ne pas modifier l'existant.avez-vous essayé de convertir le premier caractère de la chaîne en minuscules sur
if(fruits[i].charAt(0) == currChar)
etchar currChar = fruits[0].charAt(0)
états?Exemple à l'aide de Collections et ArrayList:
Développer un stagiaire statique de la classe comme dans l'exemple "CompareStrings".
Appeler le stagiaire statique de la classe dans la méthode main.
Facile à comprendre et fonctionne très bien!
Dans votre cas, vous avez un
List
de Chaînes et plus de la déjà proposé des solutions (j'ai spécialement comme @guyblank réponse) sont très bien, mais!!!, si vous avez unList
de haricots, ce qui est mon cas, vous pouvez utiliserComparable
interface dans votre bean comme ceci:Alors vous n'avez qu'à créer votre
ArrayList<UserBean> userBeanArray = new ArrayList<UserBean>();
, les remplir et de les trier:Collections.sort(userBeanArray);
Et vous l'avez fait!
De l'espoir à l'aide de la communauté 😉
Vous pouvez appeler directement la valeur par défaut tri méthode sur la liste comme ceci:
ou:
Voici un exemple pour le tri d'un tableau : non sensible à la casse
/* Sortie:[A, b, B] */