【问题标题】:Java Sorting Price Values Ascending and DescendingJava 按升序和降序对价格值进行排序
【发布时间】:2013-08-15 23:43:24
【问题描述】:

我有字符串格式的价格值(“2,000”、“3,000”等)

我想对价格值进行排序

为此,我使用了以下代码:

Comparator<Cars> comparator = new Comparator<Cars>() {

          @Override
          public int compare(Cars object1, Cars object2) {
          // return Float.compare(Integer.parseInt(object1.getPrice()), Integer.parseInt(object2.getPrice()));

           return ((Integer)Integer.parseInt(object1.getPrice())).compareTo((Integer)Integer.parseInt( object2.getPrice())); 

          }

如果我执行下面的语句

        Collections.sort(carsList, comparator);

我来了

Error:  java.lang.NumberFormatException: Invalid int: "3,000"

有人可以帮忙吗?

【问题讨论】:

    标签: java android java-me core


    【解决方案1】:

    Integer.parseInt() 不适用于包含逗号的货币 (,)。在尝试使用 parseInt() 方法之前,您可能必须执行字符串操作以删除逗号。

    做这样的事情:

    String obj1Price = object1.getPrice().replaceAll(",","");
    String obj2Price = object2.getPrice().replaceAll(",","");
    
    return ((Integer)Integer.parseInt(obj1Price )).compareTo((Integer)Integer.parseInt( obj2Price))); 
    

    【讨论】:

    • 感谢您的更新回答,我会接受您的回答,但我还有一个疑问,如果我有一个“-”值作为价格,那么排序将如何工作?
    • @IceCreamSandwitch 如果有“-”那么你还需要用“”替换它们以使 parseInt 工作。
    • 我已将 "-" 替换为 "" ,然后得到 Error:java.lang.NumberFormatException: Invalid int: "" ?
    • @IceCreamSandwitch 在您尝试使用 parsetInt() 之前,您得到的最终结果是什么?
    • 如果我调用 getter 方法来获取价格,那么值为“-”?
    【解决方案2】:

    在将货币数据(字符串表示)传递给您的方法之前修改它,例如你可以用这个:

    "2,000".replaceAll(",","");
    

    【讨论】:

      【解决方案3】:
      Integer.parseInt("3,000")
      

      正在引发异常。您需要从价格的字符串表示中去掉,

      here

      【讨论】:

        【解决方案4】:

        试试这个

        Comparator<String> comparator = new Comparator<String>() {
        
                      @Override
                      public int compare(String object1, String object2) {
                          int i = 0;
                        int j = 0;
                        try {
                            i = NumberFormat.getNumberInstance(java.util.Locale.US).parse(object1).intValue();
                              j = NumberFormat.getNumberInstance(java.util.Locale.US).parse(object2).intValue();
                        } catch (ParseException e) {
                        }
                      // return Float.compare(Integer.parseInt(object1.getPrice()), Integer.parseInt(object2.getPrice()));
                            System.out.println("i = " + ((Integer)i) + " , j = " + ((Integer)j));
        
                       return ((Integer)i).compareTo(((Integer)j)); 
        
                      } 
                  };
                    System.out.println("xxxxxxxxx = " + comparator.compare("4,000", "3,000"));
        

        【讨论】:

          【解决方案5】:
          return ((Integer)Integer.parseInt(obj1Price.replaceAll(",","") )).compareTo((Integer)Integer.parseInt( obj2Price.replaceAll(",",""))));
          

          会工作

          【讨论】:

            猜你喜欢
            • 2013-08-16
            • 1970-01-01
            • 1970-01-01
            • 2020-12-10
            • 2016-10-18
            • 1970-01-01
            • 1970-01-01
            • 2015-08-30
            相关资源
            最近更新 更多