ArrayList<String> containsFttrType = new ArrayList<>(); 这个调用add方法后 会自己加,逗号 但是我不想要怎么办
时间: 2024-09-18 13:03:27 浏览: 24
在Java中,当你使用ArrayList调用`add()`方法添加元素时,不会自动在元素之间插入逗号。`add(String)`方法只接受一个String类型的参数,并将其作为列表的新元素添加。例如:
```java
ArrayList<String> containsFttrType = new ArrayList<>();
containsFttrType.add("First Element");
containsFttrType.add("Second Element"); // 不会自动加逗号
```
如果你不想在添加元素时有额外的逗号,你需要确保每次调用`add()`方法时提供的参数是单独的字符串,而不包含它们本身。如果你想存储数组或列表作为元素,那么可以在添加之前先将它们转换成字符串形式,如:
```java
ArrayList<String> containsFttrType = new ArrayList<>();
containsFttrType.add(Arrays.toString(new String[]{"First", "Second"})); // 添加整个数组作为单个元素
```
如果你的元素本身就是数组或列表,你需要先迭代它们并将每个子元素添加到列表中,避免直接添加整个容器。
如果你确实希望保持元素间有一定的格式,比如期望元素以某种特定格式呈现(如CSV),你可以在添加元素之后手动追加逗号或者其他分隔符。但在上述代码示例中,不需要这样做。
相关问题
为什么return arraylist<string> 每段字符串会出现[,,,]
### 回答1:
可能是因为 ArrayList.toString() 方法返回的字符串将所有项以逗号分隔,并用方括号括起来。如果 ArrayList 中的某个项本身包含逗号,则 toString() 方法也会将该项项用方括号括起来以进行区分。您可以使用其它方法来避免这种情况的发生,例如逐项遍历 ArrayList 并手动构建字符串。
### 回答2:
当我们返回一个ArrayList<String>对象时,如果在ArrayList没有添加任何元素的情况下,获取到的结果可能会是"[,,,]"。这是因为ArrayList是动态数组,它会根据需要自动调整容量。当我们创建一个ArrayList对象时,默认情况下是没有任何元素的,此时数组的容量为0。当我们使用add()方法往ArrayList中添加元素时,它会根据需要自动扩容,以存放更多的元素。
然而,有时候我们可能会调用toString()方法来获取ArrayList对象的字符串表示形式。在ArrayList中,toString()方法会遍历数组中的元素,并将它们以逗号分隔的形式拼接在一起,最终返回一个包含所有元素的字符串。但是,在数组没有被填满的情况下,数组中将存在多个连续的空位,这些空位会被输出成连续的逗号",,,"。
因此,当我们返回一个未填满的ArrayList对象时,toString()方法会将空位以逗号形式输出,所以最终结果会出现"[,,,]"的情况。虽然这些逗号不代表实际存在的元素,但它们仍然是数组中的一部分。
为了避免出现"[,,,]"的情况,我们可以在返回ArrayList之前,先判断ArrayList是否为空。如果为空,可以返回一个表示空值的字符串或者null,避免返回"[,,,]"。
### 回答3:
当使用return语句返回一个ArrayList<String>时,如果该ArrayList没有被初始化或者没有包含任何元素,那么在代码中调用该方法并输出该ArrayList的结果时,会显示为[,,,]。
这种现象的原因是,ArrayList类在Java中被设计为一个动态数组,它有一个基础的容量,可以用于存储多个元素。当ArrayList被创建时,它的容量会被初始化为0,即使在声明时使用了ArrayList<String>,实际上并没有具体指定容量大小。
当我们尝试将元素添加到ArrayList中时,ArrayList会自动调整其容量以适应新添加的元素。当我们通过添加元素的方式向ArrayList中添加元素时,List的容量会被动态扩展以适应新的元素。在该过程中,ArrayList会通过增加内部数组的长度来增大容量。
如果我们在返回ArrayList时,没有向其中添加任何元素,那么该ArrayList的容量仍然为0,而输出时会显示为[,,,]。这是因为数组的长度仍然是0,但为了维持ArrayList的结构,它将以逗号分隔的形式显示为[,,,]。
为了避免返回出现空的ArrayList,我们可以在方法中添加元素并返回。或者,在返回ArrayList之前,我们可以检查ArrayList是否为空,如果为空,可以手动设置它的内容为一个指定的值,这样输出时就不会显示为[,,,]。
/** * 根据formBean修改指定参数 / public static boolean updateData(Long id, String tableName, Map<String, Object> fields) throws BusinessException, SQLException { StringBuilder fieldNames = new StringBuilder(""); Iterator<Entry<String, Object>> iter = fields.entrySet().iterator(); if (fields.isEmpty()) { log.error("更新字段为空"); return true; } else { int count = 0; List<Object> fieldValues = new ArrayList<>(); while (iter.hasNext()) { ++count; Entry<String, Object> entry = iter.next(); String fieldName = (String) entry.getKey(); Object fieldValue = entry.getValue(); String splitStr = count == fields.size() ? "" : ","; / 这段代码是一个Java中的三目运算符,它的作用是根据一个条件来决定一个字符串变量的值。 具体来说,这行代码的意思是:如果 count 等于 fields.size(),那么 splitStr 的值为一个空字符串 "",否则 splitStr 的值为逗号 ","。 通常情况下,这行代码用于在生成一个字符串时,根据某些条件来决定是否需要添加分隔符。如果这些条件不满足,就不需要添加分隔符,否则需要添加一个逗号分隔符。*/ fieldNames.append(fieldName + "=?" + splitStr); fieldValues.add(fieldValue); } JDBCAgent jdbc = null; String sql = "update " + tableName + " set " + fieldNames.toString() + " where id =?"; fieldValues.add(id); boolean isUpdate; try { jdbc = new JDBCAgent(); isUpdate = jdbc.execute(sql, fieldValues) > 0; } catch (Exception var15) { log.error(sql); log.error(fieldValues); log.error(var15.getMessage(), var15); throw var15; } finally { if (null != jdbc) { jdbc.close(); } } return isUpdate; } }以这样的形式写一个在java代码中,修改数据库表名为smsserver_out的字段status,条件是如果第一:数据库中字段status的值为U或者Q,第二:user_id等于前端传过来的值,需要考虑的情况为考虑user_id可能是一个也有可能是多个,也有可能为空,为防止sql注入,要采用预编译的方式
可以将下面的代码作为修改数据库表字段的方法,在方法中传入需要修改的参数,方法中使用预编译的方式来防止SQL注入:
```
public static boolean updateData(Long id, String tableName, Map<String, Object> fields, String userId) throws BusinessException, SQLException {
StringBuilder fieldNames = new StringBuilder("");
Iterator<Entry<String, Object>> iter = fields.entrySet().iterator();
if (fields.isEmpty()) {
log.error("更新字段为空");
return true;
} else {
int count = 0;
List<Object> fieldValues = new ArrayList<>();
while (iter.hasNext()) {
++count;
Entry<String, Object> entry = iter.next();
String fieldName = (String) entry.getKey();
Object fieldValue = entry.getValue();
String splitStr = count == fields.size() ? "" : ",";
fieldNames.append(fieldName + "=?" + splitStr);
fieldValues.add(fieldValue);
}
JDBCAgent jdbc = null;
String sql = "update " + tableName + " set " + fieldNames.toString() + " where user_id in (?) and status in ('U','Q')";
if (userId != null && !userId.isEmpty()) {
sql = sql.replace("?", userId);
} else {
sql = sql.replace("?", "''");
}
fieldValues.add(id);
boolean isUpdate;
try {
jdbc = new JDBCAgent();
PreparedStatement stmt = jdbc.getPreparedStatement(sql);
for (int i = 0; i < fieldValues.size(); i++) {
stmt.setObject(i + 1, fieldValues.get(i));
}
isUpdate = stmt.executeUpdate() > 0;
} catch (Exception var15) {
log.error(sql);
log.error(fieldValues);
log.error(var15.getMessage(), var15);
throw var15;
} finally {
if (null != jdbc) {
jdbc.close();
}
}
return isUpdate;
}
}
```
在调用该方法时,传入需要修改的参数即可:
```
Map<String, Object> fields = new HashMap<>();
fields.put("status", "V");
String userId = "123456";
boolean result = updateData(1L, "smsserver_out", fields, userId);
```
其中,1L代表需要修改的记录的ID,"smsserver_out"代表需要修改的表名,fields是Map类型的参数,存储需要修改的字段及其对应的值,userId是前端传过来的用户ID。如果用户ID为空,则使用''来代替。在方法中,使用预编译的方式来防止SQL注入。
阅读全文