我对Java很新,我遇到了下面的代码问题。下面的doAggregate方法是读取csv文件中的数据列。我希望能够检查字段[i]的值是否包含特殊字符和非转义引号,并在它们被追加之前从值中删除它们。代码为以下所示的错误:java.lang.Double无法强制转换为java.lang.String。所以听起来并非所有类型的字段都会转换为String值。有没有一种好方法来测试String是否是String?或者有更好的方法来解决这个问题吗?
public String doAggregate(Object[] fields) {
if (ObjectUtils.isEmpty(fields)) {
return "";
}
if (fields.length == 1) {
return "\"" + ObjectUtils.nullSafeToString(fields[0]) + "\"";
}
String tmp_field_value;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < fields.length; i++) {
if (i > 0) {
sb.append(getDelimiter());
}
sb.append("\"");
//start new code
tmp_field_value = (String) fields[i];
//error on line below
sb.append(getCleanUTF8String(tmp_field_value));
//end new code
//start old code
//sb.append(fields[i]);
//end old code
sb.append("\"");
}
return sb.toString();
}
public String getCleanUTF8String(String dirtyString){
String cleanString = "";
try {
byte[] cleanBytes = dirtyString.getBytes("UTF-8");
cleanString = new String(cleanBytes, "UTF-8");
cleanString = cleanString.replace("\"", "\\\"");
cleanString = cleanString.replace("'", "\\'");
} catch (UnsupportedEncodingException uee){
System.out.println("*******ERROR********: Unable to remove non UTF-8 characters in string: |" + dirtyString + "| -- Java Error Message:" + uee.getMessage());
//TODO - may need to revisit this next line, some additional character checks may need to take place if the character set exclusion fails.
cleanString = dirtyString;
}
return cleanString;
}
答案 0 :(得分:3)
而不是像tmp_field_value = (String) fields[i]
那样执行以下代码。
if(fields[i]!=null){
tmp_field_value = fields[i].toString();
}