比较表示java中数字的字符串值

时间:2015-07-22 11:40:57

标签: java

是否可以比较两个类型的String来查找java中哪个更大? (例如:112 510,54和94 314,01) 谢谢您的帮助!

6 个答案:

答案 0 :(得分:1)

您可以将字符串转换为整数,然后比较两个数字。

答案 1 :(得分:1)

这是一个比较器,它将处理基本上任何数字类型的字符串中的Numbers。有关如何使用比较器is here和BigDecimal信息的信息是here

修改:修改了一下以处理您的特定(欧洲?)数字格式。请注意,字符串是不可变的,因此您的输入值实际上根本不会更改。

DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator(' ');
symbols.setDecimalSeparator(',');

String pattern = "#,##0.###";

DecimalFormat decimalFormat = new DecimalFormat( pattern, symbols );
decimalFormat.setMaximumIntegerDigits(19);
decimalFormat.setMaximumFractionDigits(2);

System.out.println( decimalFormat.format( 12345.67 ) );

第二次编辑: 可能还值得花时间设置一个十进制格式化器来格式化和解析你的数字:这是一个可以处理你的格式的例子:

decimalFormat.parse(numberString).compareTo(otherNumberString)

然后你可以做

<supports-screens 
  android:smallScreens="true"
  android:normalScreens="true"
  android:largeScreens="true"
  android:xlargeScreens="true"
  android:anyDensity="true"
  android:resizeable="true"/>

一般来说 - 我花了一些时间来探讨DecimalFormat文档。

此外 - 不要构建自己的解析器 - 除非在此方面产生某种严重的性能影响,否则需要付出很多努力。

答案 2 :(得分:0)

首先执行substring直到逗号并检查哪个String更长(更大的数字)如果lenghs相同,则逐个比较单个字符串的数字。如果其中一个更大 - 有你的答案。

答案 3 :(得分:0)

没有替换,没有转换,没有bigdecimals,没有解析,适用于任何分隔符。不完美。使用风险自负。

public class OtterApproach
{
    public static void minmax(String s1, String s2)
    {
        String min = s1, max = s2;
        if (s1.length() > s2.length())
        {
            min = s2;
            max = s1;
        }
        else if (s1.length() == s2.length())
        {
            Character s1c = null;
            Character s2c = null;
            for (int i = 0; i < s1.length(); i++)
            {
                s1c = s1.charAt(i);
                s2c = s2.charAt(i);

                if ( s1c.equals(s2c) 
                     || (   !Character.isDigit(s1c)
                         && !Character.isDigit(s2c)))
                {
                    continue;
                }
                else if (s1c < s2c)
                {
                    min = s1;
                    max = s2;
                    break;
                }
                else 
                {
                    max = s1;
                    min = s2;
                    break;
                }
            }
        }
       System.out.println("Min "  + min + " max " + max);

    }
    public static void main (String[] args) 
    {
        String s1 = "112 510,54";
        String s2 = "94 314,01";
        minmax(s1,s2);
        minmax("1111 1111,00" , "2222 1111,00");
        minmax("999 454,44", "999 454,43");
        minmax("1,0", "2,0");
        minmax("999 454,42", "999 454,43");
        minmax("2,0", "1,0");
        minmax("222.10", "222.09");
        minmax("222,09", "222,09");
        minmax("222,10", "222,09");
        minmax("222.10", "222,09");
        minmax("222,10", "222.09");
    }
}

输出

Min 94 314,01 max 112 510,54
Min 1111 1111,00 max 2222 1111,00
Min 999 454,43 max 999 454,44
Min 1,0 max 2,0
Min 999 454,42 max 999 454,43
Min 1,0 max 2,0
Min 222.09 max 222.10
Min 222,09 max 222,09
Min 222,09 max 222,10
Min 222,09 max 222.10
Min 222.09 max 222,10

答案 4 :(得分:0)

  
      
  1. 首先将字符串转换为double(因为您的示例太大而无法声明为整数),您不希望逗号   在数字

         

    String stringWithoutComma = yourString.replaceAll(&#34;,&#34;,&#34;&#34;);

  2.   
  3. 然后使用

    解析为double      

    double number = Double.parseDouble(stringWithoutComma);

  4.   
  5. 最后可以进行比较。

  6.   

答案 5 :(得分:0)

您需要先将字符串值转换为数字。您给出的示例值包含逗号,因此无法使用parseInt方法解析它们。您需要使用NumberFormat类,如下所示。

NumberFormat.getNumberInstance(java.util.Locale.US).parse("111,323,234")

这是必需的,因为您提供的值包含逗号。

一旦有两个int值,将它们作为普通数字进行比较。