有一些值,例如AB,A012B,CD,1、10、01、9我必须对其进行排序,输出的输出应为01、1、9、10,A012B,AB,CD可以使用任何试图使用collection的collection
.sort函数,但将所有内容都视为字符串并像01,1,10,9,A012B,AB,CD一样打印,这不是我的要求…请帮助
//捕鱼技术
List<String> values = new ArrayList<String>();
values.add("AB");
values.add("A012B");
values.add("CD");
values.add("1");
values.add("10");
values.add("01");
values.add("9");
values.add("I");
Collections.sort(values, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO tweak the comparator here
try{
Integer integer1 = Integer.valueOf(o1);
Integer integer2 = Integer.valueOf(o2);
return integer1.compareTo(integer2);
}catch (java.lang.NumberFormatException e) {
return o1.compareTo(o2);
}
}
});
System.out.println(values);
}
//不够???
//这是鱼
public static void main(String[] args) throws Exception {
List<String> values = new ArrayList<String>();
values.add("AB");
values.add("A012B");
values.add("CD");
values.add("1");
values.add("10");
values.add("01");
values.add("9");
int maxLen = 0;
for (String string : values) {
if (string.length() > maxLen) {
maxLen = string.length();
}
}
Collections.sort(values, new MyComparator(maxLen));
System.out.println(values);
}
public static class MyComparator implements Comparator<String> {
private int maxLen;
private static final String REGEX = "[0-9]+";
public MyComparator(int maxLen) {
this.maxLen = maxLen;
}
@Override
public int compare(String obj1, String obj2) {
String o1 = obj1;
String o2 = obj2;
// both numbers
if (o1.matches("[1-9]+") && o2.matches("[1-9]+")) {
Integer integer1 = Integer.valueOf(o1);
Integer integer2 = Integer.valueOf(o2);
return integer1.compareTo(integer2);
}
// both string
if (o1.matches("[a-zA-Z]+") && o2.matches("[a-zA-Z]+")) {
return o1.compareTo(o2);
}
Pattern p = Pattern.compile(REGEX);
Matcher m1 = p.matcher(o1);
Matcher m2 = p.matcher(o2);
List<String> list = new ArrayList<String>();
while (m1.find()) {
list.add(m1.group());
}
for (String string : list) {
o1.replaceFirst(string, leftPad(string, "0", maxLen));
}
list.clear();
while (m2.find()) {
list.add(m2.group());
}
for (String string : list) {
o2.replaceFirst(string, leftPad(string, "0", maxLen));
}
return o1.compareTo(o2);
}
}
public static String leftPad(String stringToPad, String padder, Integer size) {
final StringBuilder strb = new StringBuilder(size.intValue());
final StringCharacterIterator sci = new StringCharacterIterator(padder);
while (strb.length() < (size.intValue() - stringToPad.length())) {
for (char ch = sci.first(); ch != CharacterIterator.DONE; ch = sci.next()) {
if (strb.length() < (size.intValue() - stringToPad.length())) {
strb.insert(strb.length(), String.valueOf(ch));
}
}
}
return strb.append(stringToPad).toString();
}
问题内容: 我在排序包含整数的字符串时遇到问题。如果使用下面的代码,我将进行排序:1some,2some,20some,21some,3some,一些 但是我希望将其排序为:1some,2some,3some,20some,21some,一些 我怎样才能做到这一点? 谢谢! 问题答案: 这是有关如何执行此操作的独立示例(未特别优化): 输出量 说明 该示例使用一个常数来推断数字是否位于的起始位置。
问题内容: 有没有一种简单的方法可以在Python中按字母顺序对字符串中的字母进行排序? 因此对于: 我想返回: 问题答案: 你可以做:
我的朋友说这是不可能的,但我相信她错了。假设我有一个由字母数字字符组成的字符串列表: AAA1、aaaa、aaa、a12、a5、44a44、3232aa 我想写一个流,它将: < li >查看每个单独的元素 < li >识别并计算所有字母(忽略数字) < li >如果数字是奇数,则执行x < li >如果数字是偶数,请按y 她说这将导致流中的终端操作(计数),这是不可能的。我在网上看了看,开始后,
问题内容: 我想按字母顺序对JAVA中的字符串进行排序,如下所示:AaBbCcDdEeFfGg之后是大写字母和小写字母。例如,如果我把AbaC退还给我AabC,谢谢! 问题答案: 如果先将字符放入数组中,则可以使用进行此操作。(为了使用不区分大小写的自定义比较器,它必须是对象数组,而不是基元。)
问题内容: 我想对具有nr的字符串进行排序。我怎么做? 可以说我的整数是 在主要我做class2.Sort(); 提前致谢。 问题答案:
问题内容: 允许用户使用字符串数组进行演奏。他们可以将字符串添加到数组中,从数组中删除字符串,在数组中搜索字符串,最终他们将能够对数组进行排序。排序使我很困惑。我尝试了几种不同的方法。第一种方法是将数组转换为ArrayList并使用Collections对ArrayList进行排序,然后将其转换回静态类数组。没用 我尝试的第二种方法是遍历数组,并尝试仅对用户添加的字符串进行排序,而不是对数组中的所