我想要做的是将名为nameWithYear的字符串设置为等于电影[0] +"(" +电影[1] +")" (所以"电影标题(年)")来自从CSV解析的文本。
每当我尝试时,我都会遇到一个问题,即我继续获取数组越界错误。我尝试将字符串设置为仅等于电影[0],它成功运行。当我尝试将其设置为电影[1]时,它会失败。我可以做一个包含元素[1]的System.out,它输出就好了,没有任何问题。换句话说,出于某种原因,我只能在字符串中包含元素[0]而不包含元素[1]。所以我假设它与声明字符串的值有关。只是不确定是什么。
代码如下:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class CSVParsing {
public String parseCSV() {
String csvFile = "C:\\Users\\RAY\\Desktop\\movies.csv";
BufferedReader br = null;
String nameWithYear = new String();
String line = "";
String csvSplitBy = ",";
try {
br = new BufferedReader(new FileReader(csvFile));
while ((line = br.readLine()) != null) {
// use comma as separator
if (line.charAt(0) == '"')
{
csvSplitBy = "\",";
}
else
{
csvSplitBy = ",";
}
String[] movies = line.split(csvSplitBy);
nameWithYear = ""+ movies[0]+" ("+movies[1]+")";
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return nameWithYear;
}
public static void main (String[] args)
{
CSVParsing obj = new CSVParsing();
String testString = obj.parseCSV();
}
}
请注意,它并非100%完整,我正在以小块测试它,以确保它按照我的意愿执行所有操作。
更新:发现它与空白年份条目有关,作为CSV的一部分。我该如何处理?一旦发现年份条目为空白,该程序就会中断。
更新2:我用自己的研究解决了这个问题。我在split()之后获取结果并将它们放入ArrayList中。这样,我可以通过将其替换为另一个值来处理年份列中的空白条目。
答案 0 :(得分:1)
我猜问题与您的输入文件有关。请确保您的输入不是形式
" cauchy hep(21 \ 10 \ 1991)"," cauchy hep" 。注意)和"之间的空间。删除空格,如果有的话:
if (line.charAt(0) == '"')
{
csvSplitBy = "\",";
}
else
{
csvSplitBy = ",";
}
csvSplitBy等于" \","没有字符串的最后一个字符的空格。如果您的文件没有遵循您指定的模式,则整行或整个文件将被视为单个字符串,并将存储在电影[0]中。因此电影索引1处不会有字符串,这就是为什么ArrayIndexOutOfBound。 删除空间或者您可以在开头包含空格" \""再次注意到"之间的空间。 \""它会解决问题。
答案 1 :(得分:0)
split()
方法返回数组中的一个元素,这意味着line
变量中不存在分隔符。
line.contains(csvSplitBy);// will be evaluated to false in case of one item is returned by split();
确保CSV文件以逗号分隔..或者数据有多个列(CSV格式正确)
我希望这可以提供帮助!