输入字符串“4018.B”的 NumberFormatException

问题描述

以下代码来自手持扫描仪设备的Android应用程序;设备应扫描不同的条码和二维码,不同的数字范围、数字和数字;

这就是我决定使用 .matcher 而不是正则表达式的原因;以下代码适用于解析“1367+700”等组合:

editBarcode.setonClickListener(new View.OnClickListener() { //tv is the TextView.
            public void onClick(View v) {
                code = editBarcode.getText().toString();
                XXXStorageApp.getInstance().setScannedCode(code);
                editBarcode.setText("");
              if (ScanService.checkEnteredCode(code,basic,content,MainDetailActivity.this) == true) {
                    return;
                }
                else {
                Pattern p = Pattern.compile(code);
                  Matcher matcher = p.matcher(Pattern.quote("\\+"));
                    if (matcher.find()){
                       retrievedItemNo = String.valueOf(matcher);
                    }
                String intermediateItemNo = code;
                String[] splitString = intermediateItemNo.split(Pattern.quote("+"));
                retrievedItemNo = splitString [0];
                String intermediateString = code.substring(code.indexOf("+") + 1);
                retrievedQuantity = intermediateString.split("\\+")[0];
                if(XXXStorageApp.getInstance().NoList.contains(retrievedItemNo) || XXXStorageApp.getInstance().EanList.contains(scannedCode)){
                    Log.d(String.valueOf(XXXStorageApp.getInstance().NoList),"NoList");
                    Log.d(String.valueOf(XXXStorageApp.getInstance().EanList),"EanList");
                }
                else {
                    Log.d(String.valueOf(XXXStorageApp.getInstance().NoList),"EanList");
                    Vibrator vibrator;
                    vibrator = (Vibrator) getApplicationContext().getSystemService(Context.VIBRATOR_SERVICE);
                    vibrator.vibrate(3000);
                    Uri notification = ringtoneManager.getDefaultUri(ringtoneManager.TYPE_NOTIFICATION);
                    ringtone r = ringtoneManager.getringtone(getApplicationContext(),notification);
                    r.play();
                    Toast.makeText(getApplicationContext(),R.string.not_in_database,Toast.LENGTH_LONG).show();
                    return;
                }

                if (!addBooking.isEnabled() == true && removeBooking.isEnabled())

                {
                    AddBookingMessage message = new AddBookingMessage();
                    message.setType("add-item-to-pallet");
                    message.setPalNo(receivedPalNo);
                    message.setItem(retrievedItemNo);
                    if (String.valueOf(retrievedQuantity).matches("") ||
                            retrievedQuantity == null ||
                            retrievedQuantity.trim().isEmpty()) {
                        final Dialog dialog = new Dialog(MainDetailActivity.this,0);
                        dialog.requestwindowFeature(Window.FEATURE_NO_TITLE);
                        dialog.setCancelable(true);
                        dialog.setContentView(R.layout.sortiment_layout);
                        dialog.getwindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
                        TextView textView = dialog.findViewById(R.id.textView4);
                        Button okButton = dialog.findViewById(R.id.ok);
                        okButton.setonClickListener(new View.OnClickListener() {

                            @Override
                            public void onClick(View v) {
                                retrievedQuantity = textView.getText().toString();
                                message.setQuantity(Integer.valueOf(retrievedQuantity));
                                message.setSource(source);
                                message.setTime(time);
                                RestClient.putBookingOnPallet(basic,message,MainDetailActivity.this);
                                dialog.dismiss();
                            }
                        });
                        Button cancelButton = dialog.findViewById(R.id.cancel);
                        cancelButton.setonClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                dialog.dismiss();
                            }
                        });
                        dialog.show();
                    }
                else
                    {
                        message.setQuantity(Integer.valueOf(retrievedQuantity));
                        message.setSource(source);
                        message.setTime(time);
                        RestClient.putBookingOnPallet(basic,MainDetailActivity.this);
                    }

                }

                if (addBooking.isEnabled() && !removeBooking.isEnabled() == true)
                {
                    AddBookingMessage message = new AddBookingMessage();
                    message.setType("remove-item-from-pallet");
                    message.setPalNo(receivedPalNo);
                    message.setItem(retrievedItemNo);
                    message.setEan(scannedCode);
                    if (spinner != null && spinner.getSelectedItem() != null) {
                        source = spinner.getSelectedItem().toString();
                    }
                    if (String.valueOf(retrievedQuantity).matches("") || retrievedQuantity == null
                            || retrievedQuantity.trim().isEmpty())
                    {
                            final Dialog enterDialog = new Dialog(MainDetailActivity.this,0);
                            enterDialog.requestwindowFeature(Window.FEATURE_NO_TITLE);
                            enterDialog.setCancelable(true);
                            enterDialog.setContentView(R.layout.sortiment_layout);
                            enterDialog.getwindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
                            TextView enterQuantityView = enterDialog.findViewById(R.id.textView4);
                            Button okQuantityButton = enterDialog.findViewById(R.id.ok);
                            okQuantityButton.setonClickListener(new View.OnClickListener() {

                                @Override
                                public void onClick(View v) {
                                    retrievedQuantity = enterQuantityView.getText().toString();
                                    message.setQuantity(Integer.valueOf(retrievedQuantity));
                                    message.setSource(source);
                                    message.setTime(time);
                                    RestClient.removeItemFromPallet(basic,MainDetailActivity.this);
                                    enterDialog.dismiss();
                                }
                            });
                            Button cancelQuantityButton = enterDialog.findViewById(R.id.cancel);
                            cancelQuantityButton.setonClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    enterDialog.dismiss();
                                }
                            });
                            enterDialog.show();
                        }
                        else {
                            message.setQuantity(Integer.valueOf(retrievedQuantity));
                            message.setSource(source);
                            message.setTime(time);
                            RestClient.removeItemFromPallet(basic,MainDetailActivity.this);
                    }
                }
                editBarcode.setText("");
            }}

但是应用程序崩溃了

 java.lang.NumberFormatException: For input string: "4018.B"

所以,这里的问题是解析像“4018.B+95”这样的字符串。

我不知道如何使用 .matcher 处理这个混合输入字符串,并且绝对不想使用正则表达式;所以基本上,以下所有输入字符串 - 包括类型转换 - 都应该正确处理:

1256+70

1235.B+70

1256+70+DB

1235.B+70+DB

1256+70+DB2020-123

1235.B+70+DB2020-123

1256+0+DB2020-123

1235.B+0+DB2020-123

所以,基本上我需要一个处理输入的 .matcher() 条件

“1235.B”

混合整数和字符串;我需要将它存储在一个字符串类型的变量中; 这里的问题是“。”无法识别“1235.B”中的应用程序因此崩溃,因为数字包含字符串(“.B”)

所以,这里有两个问题:

  1. 如何使用 .matcher() 识别字符串是否包含“.B”或“.C”或类似内容

  2. 如何在一种变量类型中正确处理不同的类型?

由于我被困在这个问题上,如果您有任何提示或帮助,我将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)