我想创建一个以逗号分隔定界符的csv文件,而读取csv时会以逗号分隔形式使s5字符串。希望将s5字符串保留在单列中。
String s1="quick";
String s2="brown";
String s3="fox";
String s4="jump";
String s5="over,the,lazy,dog";
String csvRecord = String.format("%s,%s,%s,%s,%s", s1,s2,s3,s4,s5);
任何人都可以帮助我,因为我是字符串的新手。
答案 0 :(得分:1)
我认为您需要将它们添加到双字符串中。
尝试一下:
String s5="\"over,the,lazy,dog\"";
答案 1 :(得分:0)
要在数据中包含定界符,必须在结果csv中用双引号将该字段引起来:
quick,brown,fox,jump,"over,the,lazy,dog"
如果某些字段中有双引号,则必须将其转义:
123,"24"" monitor, Samsung",456 // Windows style
123,"24\" monitor",456 // Linux style
您不必引用所有字段,只需引用包含定界符或双引号(或换行符)的字段即可。
有关csv通用格式的更多详细信息,请参见RFC4180。
答案 2 :(得分:0)
就像其他答案一样,您实际上必须考虑许多特殊情况,最典型的两种特殊情况是:逗号和双引号。
如Chewtoy所述,CSV wiki已将格式明确指定为:
import firebase from 'firebase/app'
import 'firebase/auth'
export default{
state: {
user: null
},
mutations: {
setUser (state, payload) {
state.user = payload
}
},
actions: {
authCheck({ commit }) {
commit('setLoading', true)
firebase.auth().onAuthStateChanged((user) => {
if(user){
commit('setUser', {
id: user.uid,
name: user.displayName,
email: user.email
})
commit('setLoading', false)
}
})
},
logout({commit}) {
firebase.auth().signOut()
commit('setUser', null)
}
},
getters: {
user (state) {
return state.user
}
}
}
要处理这两种情况,您可以尝试以下操作:
Year,Make,Model,Description,Price
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""",,5000.00
1996,Jeep,Grand Cherokee,"MUST SELL!
air, moon roof, loaded",4799.00
输出:
public class CsvAddComma {
public static void main(String... args) {
List<String> list = new ArrayList<>();
list.add("quick");
list.add("over,the,lazy,dog");
list.add("Venture \"Extended Edition, Very Large\"");
list.stream()
.map(s -> convertToCsvFormat(s))
.forEach(System.out::println);
}
private static String convertToCsvFormat(String input) {
if (input.contains("\"")) {
input = input.replaceAll("\"", "\"\"");
}
if (input.contains(",")) {
input = String.format("\"%s\"", input);
}
return input;
}
}
对于其他特殊情况,您需要根据当前情况进行处理。也许可以忽略不计。
答案 3 :(得分:0)
除非您要进行一些分配工作,否则您绝对需要一个CSV库来为您处理。您还需要关心值中的行尾和其他引号,而不仅仅是分隔符
使用univocity-parsers尝试以下代码:
CsvWriterSettings settings = new CsvWriterSettings();
CsvWriter writer = new CsvWriter(settings);
String result = writer.writeRowToString(s1,s2,s3,s4,s5);
希望这会有所帮助。
免责声明:我是这个图书馆的作者。它是开源且免费的(Apache 2.0许可证)