在 ubuntu 服务器上使用 java 替换字符串中的空格

问题描述 投票:0回答:1

我正在使用 csv 文件导入一些数据,我应该逐行读取它们并将值分配给字符串,然后将每个值设置为其对象类中的字段名称。 我的问题是某些字段是数字,我需要用空字符串替换空格,以便我可以将字符串值转换为新的 BigDecimal。

java代码:

 public static <T> T transformCsvToData(String ligneCsv, Class clazz, String[] fieldNames) {

        T t = null;
        try {
            if (!StringUtils.isBlank(ligneCsv)) {
                String[] listValues = ligneCsv.split(String.valueOf(DEFAULT_SEPARATOR));
                t = (T) clazz.newInstance();

                for (int i=0; i<fieldNames.length; i++) {
                    String fieldName = fieldNames[i];
                    String stringValue = listValues.length > i ? listValues[i] : null;

                    PropertyDescriptor pd = new PropertyDescriptor(fieldName, clazz);
                    Class fieldType = pd.getPropertyType();


                    // verifier qu'il existe une methode set
                    if (pd.getWriteMethod() != null && !"class".equals(pd.getName())) {

                        // recuperer la methode set
                        Method writeMethod = pd.getWriteMethod();

                        Object castedValue = null;
                        if (StringUtils.isNotBlank(stringValue)) {
                            try {
                                stringValue = stringValue.trim();

                                if (fieldType == String.class) {
                                    castedValue = stringValue;
                                } else if (fieldType == Boolean.class) {
                                    castedValue = Boolean.valueOf(stringValue.toLowerCase());
                                } else if (fieldType == Date.class) {
                                    castedValue = new SimpleDateFormat(FORMAT_INPUT_DATE, Locale.FRANCE).parse(stringValue);
                                } else if (fieldType == Integer.class) {
                                    castedValue = Integer.valueOf(stringValue);
                                } else {
                                    stringValue = stringValue.replace(",", ".").replace("%", "").replace("\u00A0", " ").replaceAll("\\s+", " ").replaceAll(" ", "");
                                    if (fieldType == BigDecimal.class) {
                                        castedValue = new BigDecimal(stringValue);
                                    } else if (fieldType == Long.class) {
                                        castedValue = Long.valueOf(stringValue);
                                    } else if (fieldType == Double.class) {
                                        castedValue = Double.valueOf(stringValue);
                                    }
                                }

                            } catch (NumberFormatException | ParseException ex) {
                                castedValue = null;
                            }
                        }

                        writeMethod.invoke(t, castedValue);
                    }
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

        return t;
    }

我的开发本地环境正在 Windows 上运行,一切正常,但是当我构建工件并通过 jenkins 在 ubuntu 服务器上测试它时。该功能未返回正确的结果。

ubuntu 和 windows 服务器之间有什么区别?我该如何解决这个问题? 注意:我也在 Windows 服务器上部署了同样的战争,一切都正常。

java linux spring ubuntu window
1个回答
0
投票

我猜数字之间的不是空白,它是一个无法打印的字符,所以尝试使用

stringvalue = stringvalue.replace(",", ".").replaceAll("[^\\d\\.]*", "")
它替换所有不是数字或点的字符

© www.soinside.com 2019 - 2024. All rights reserved.