【问题标题】:Decimal Format error十进制格式错误
【发布时间】:2015-10-12 06:56:47
【问题描述】:

我必须将字符串欢迎转换为数字格式。但是当我要执行它时会抛出异常

Exception in thread "main" java.text.ParseException: Unparseable number: "Welcome"
    at java.text.NumberFormat.parse(Unknown Source)
    at sample.Sam.main(Sam.java:13)

包装样本;

import java.text.DecimalFormat;
import java.text.ParseException;

public class Sam {

    public static void main(String[] args) throws ParseException {
        // TODO Auto-generated method stub
            String str="Welcome,@123";
            DecimalFormat df = new DecimalFormat(str);

            System.out.println( df.parse(str));

    }

}

【问题讨论】:

  • 你解析的字符串不是十进制数。
  • 你有没有试过在普通数学中1+welcome?这应该是什么结果?您认为欢迎数字代表什么?
  • 我有一个包含十进制和字符的字符串。我想将所有这些转换为十进制格式。这可能吗?/
  • @Kevin 我没试过
  • 一切皆有可能,但是.. 在这种情况下,您只需从该字符串中找到一个数字

标签: java


【解决方案1】:

您共享的代码不会抛出您复制的异常...

不管怎样,这里有一段代码可以从任何字符串中提取一个整数:

        String str="Welcome,@123";
        Pattern p = Pattern.compile( "\\D*(\\d+)\\D*" );
        Matcher m = p.matcher(str);
        if ( m.matches() )
        {
            int value = Integer.parseInt( m.group(1) );
            System.out.println( value );
        }
        else
        {
            System.out.println("no number found");
        }

【讨论】:

    【解决方案2】:

    您需要先用一个有效的DecimalFormat pattern 字符串声明格式,然后才能解析真正的字符串:

    String pattern = "'Welcome,@'0"; //0 is a placeholder, see the link for the others
    DecimalFormat df = new DecimalFormat(pattern);
    
    String input = "Welcome,@123";
    System.out.println(df.parse(input)); //prints 123
    

    由于, 也是placeholder,所以我不得不引用'Welcome,@' 的文字。

    【讨论】:

      【解决方案3】:

      一切皆有可能,但.. 在这种情况下,您只需从该字符串中找到一个数字,请查看this

      String s = "...stuff...";
      
          for (int i = 0; i < s.length(); i++){
              char c = s.charAt(i);        
              //Process char
          }
      

      识别字符是否为数字应该可以使用that

      Character.isDigit(string.charAt(0))
      

      比如:

      String s = "..ag123";
      String numStr = "";
          for (int i = 0; i < s.length(); i++){
              char c = s.charAt(i);        
              if(Character.isDigit(s.charAt(i))){
                    numStr += s.charAt(i);
               }
          }
       Integer.parseInt(numStr); 
      

      对于小数,您还必须识别小数(可能还有数千?)分隔符:) 但是这种方式..

      顺便说一句,您可能仍然可以使用 十进制格式化程序,但您需要为此设置模式(不确定它是否可能像字符串模式) - 您无法在 doc 中找到它,我不确定,但它会类似于[^0123456789][123456789][separators][0123456789][^0123456789](缺少非强制性并在那里重复)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-02
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多