gpt4 book ai didi

java - 比较和排序字符串 Java

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:45:05 24 4
gpt4 key购买 nike

我有字符串数组:15MB、12MB、1TB、1GB。我想按照 MB 小于 GB 和 TB 的规则按字典顺序比较它们。所以最后我想得到:12MB、15MB、1GB、1TB。我找到了一种比较字母的方法:

 final static String ORDER="MGT";

public int compare(String o1, String o2) {
int pos1 = 0;
int pos2 = 0;
for (int i = 0; i < Math.min(o1.length(), o2.length()) && pos1 == pos2; i++) {
pos1 = ORDER.indexOf(o1.charAt(i));
pos2 = ORDER.indexOf(o2.charAt(i));
}

if (pos1 == pos2 && o1.length() != o2.length()) {
return o1.length() - o2.length();
}

return pos1 - pos2 ;
}

我正在考虑按数字和字母拆分字符串,但我怎样才能按字母“MB..”然后按数字对它们进行排序。我是使用两个比较器还是其他东西?

最佳答案

如果您先将数据转换为通用单位(例如 MB),比较起来会容易得多。如果此转换后值相同,则应应用字典排序,它可能如下所示:

private int convertToMegaBytes(String s) {

char c = s.charAt(s.length() - 2);

if(c == 'G')
return 1024 * Integer.parseInt(s.substring(0, s.length() - 2));
if(c == 'T')
return 1024 * 1024 * Integer.parseInt(s.substring(0, s.length() - 2));

return Integer.parseInt(s.substring(0, s.length() - 2));

}

final static String ORDER = "MGT";

public int compare(String o1, String o2) {
int v = convertToMegaBytes(o1) - convertToMegaBytes(o2);
// if values are equal then compare lexicographically
return v == 0 ? ORDER.indexOf(o1.charAt(o1.length() - 2)) - ORDER.indexOf(o2.charAt(o2.length() - 2)) : v;
}

关于java - 比较和排序字符串 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55786698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com