【发布时间】:2013-11-20 20:28:47
【问题描述】:
我正在逐行读取文件,并使用line.indexOf('"', 1) 和substring() 将其拆分为更小的字符串
但是这种方式不会检测" 之前是否为\,因此它不会对转义字符做出反应。我该如何解决?
(我不能只使用line.split('"'),因为"既位于子字符串的开头和结尾,也不会被其他字符分割,因为我的任务不允许这样做。)
整个阅读片段是:
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
while(line.length()>0){
if(line.charAt(0) == ',' || line.charAt(0) == ' '){
line = line.substring(1);
}
else{
if(line.indexOf(',') != -1){
if (line.charAt(0) == '"'){
pabaiga = line.indexOf("\"", 1);
zodis = line.substring(0, pabaiga+1);
line = line.substring(pabaiga+1);
duomenys.add(zodis);
}
else{
pabaiga = line.indexOf(',');
zodis = line.substring(0, pabaiga);
line = line.substring(pabaiga);
duomenys.add(zodis);
}
}
else{
zodis = line;
line = line.substring(line.length());
duomenys.add(zodis);
}
}
for(String elem : duomenys){
System.out.println(elem);
}
duomenys.removeAll(duomenys);
}
我不能只用 , 分隔符来分割,因为字符串中间可能有一个,在文本文件中使用 \, 不是一种选择。所以我被建议将一个 sting 元素确定为“文本”,但如果它在中间包含另一个“或\”,我当前的代码不起作用。
如果我的文本文件中的行是"start \"title\" end", 10, 20, "text"
字符串数组应该包含
- [0]
"start "title" end" - [1]
10 - [2]
20 - [3]
"text"
【问题讨论】:
-
请提供输入示例。我想你可以
split,因为它需要一个正则表达式。 -
使用正则表达式来解决您的问题。你可以定义一个正则表达式取反,它只在前面的字符不是反斜杠()时才匹配
-
请 [edit] 你的问题,输入和预期输出的例子很少,因为现在你的问题对你想要达到的目标不是很清楚。
-
你能用一个反斜杠来转义另一个吗?如果是这样,您实际上会想要查找前面有偶数个反斜杠的第一个双引号。请说明这是否是您需要的。
-
@DavidWallace 是的,我想找到第一个不带 \ 的双引号。