当前位置: 首页 > 知识库问答 >
问题:

比较和排序字符串

陈朗
2023-03-14

我有字符串数组: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”对它们进行排序。然后根据他们的数字。我是使用两个比较器还是其他什么?

共有1个答案

孟乐
2023-03-14

如果首先将数据转换为公共单位(例如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;
}
 类似资料:
  • 问题内容: 我听说散列(即将字符串或对象转换为数字)用于字符串等,因为比较数字比字符串更容易。如果为真,这是什么原因? 问题答案: 不一定是这种情况,但大多数时候可能是这样。 请考虑以下情况: 我想比较字符串“ apples”和“ oranges”。如果我只想确定“ apples” ==“ oranges”,我只需要比较每个字符串的第一个字符:’a’!=’o’=>“ apples”!=“ oran

  • 我想排序2列表并比较它们,但排序方法不起作用。我有2个字符串列表,其中包括整数。 这些是我的名单 我的getwords方法返回:

  • 我有一个java程序,它可以构建一个最大堆,调用Heapify并对任何列表进行排序。目前,它将对字母表进行排序,不会出现任何问题,甚至还会列出一系列字符串,如apple、addle、azzle,也不会出现任何问题。下面是程序输入的屏幕截图,其中显示了第一行要排序的项目数及其下面的列表: 绿色是我知道已经正确排序的输入。如果检查unicode表,可以看到绿色列表的排序正确。但是,我的程序输出不正确(

  • 问题内容: 我想按字母顺序比较上述两个字符串(在本例中为“ Project”,然后是“ Sunject”,因为“ P”在“ S”之前)。有谁知道如何用Java做到这一点? 问题答案: 可能需要或可能不需要。 如果需要本地化的字符串排序,请查看此链接。

  • 问题内容: 尝试根据元素字符串长度对数组进行排序时,我被编译错误震惊。我有一套开始, 我理想地想排序 所以我有一个比较器类型 然后我打电话给全班 但随后,它引发了两个编译错误: 任何解决问题的线索,我将不胜感激。 问题答案: 您需要指定一个类型参数,以使实现生效。 在Java 1.7和更高版本中,您还可以将此方法的主体简化为: 另外,对对象进行排序。由于要对数组进行排序,因此应使用:

  • 问题内容: 我在Firebase中有一个数据库,该数据库将有单独的用户节点。在每个用户的节点中将是与他们有关的数据,并且将是私有的。除此之外,我还想创建一个仅包含已注册电子邮件集合的节点。原因是当用户使用“登录VC”并输入电子邮件时。如果电子邮件已注册,则图像视图将变为绿色。但是,如果电子邮件不在数据库中(或与电子邮件地址格式不匹配),该图像将为红色。 我先前的问题的先前答案表明我需要更改“。”。