[英]Split a string with a space in Java, when a space occurs?
我正在嘗試從 CSV 文件中提取數據,其中有以下示例 CSV
timestamp, Column1,column2,column3
2019-05-07 19:17:23,x,y,z
2019-03-30 19:41:33,a,b,c
etc.
目前,我的代碼如下:
public static void main(String[]args){
String blah = "file.csv";
File file = new File(blah);
try{
Scanner iterate = new Scanner(file);
iterate.next(); //skips the first line
while(iterate.hasNext()){
String data = iterate.next();
String[] values = data.split(",");
Float nbr = Float.parseFloat(values[2]);
System.out.println(nbr);
}
iterate.close();
}catch (FileNotFoundException e){
e.printStackTrace();
}
}
但是,我的代碼給了我一個錯誤
java.lang.ArrayIndexOutOfBoundsException: Index 3 is out of bounds for length 3
我的理論是分裂是這里的問題。 由於沒有逗號,我的程序認為數組僅以第一個元素結尾,因為第一個元素上沒有逗號(我已經用時間戳列對其進行了測試,它似乎有效,但是,我想打印值在第 3 欄)
如何使用 split 函數獲取 column1、column2 和 column3 值?
import java.util.*;
import java.util.*;
import java.io.*;
public class Sample
{
public static void main(String[] args)
{
String line = "";
String splitBy = ",";
try
{ int i=0;
String file="blah.csv";
BufferedReader br = new BufferedReader(new FileReader(file));
int iteration=0;
while ((line = br.readLine()) != null) //returns a Boolean value
{ if(iteration < 1) {
iteration++;
continue;} //skips the first line
String[] stu = line.split(splitBy);
String time=stu[3];
System.out.println(time);
}
}
catch (IOException e)
{
e.printStackTrace();
}} }
通過使用 BufferedReader 嘗試這種方式
輸入:
timestamp, Column1,column2,column3
2019-05-07 19:17:23,x,y,z
2019-03-30 19:41:33,a,b,c
2019-05-07 19:17:23,x,y,a
2019-03-30 19:41:33,a,b,f
2019-05-07 19:17:23,x,y,x
2019-03-30 19:41:33,a,b,y
上面這段代碼的輸出是:
z
c
a
f
x
y
幾點建議:
Scanner#nextLine
和Scanner#hasNextLine
。\\s+|,
作為split
方法的參數。 正則表達式模式\\s+|,
表示一個或多個空白字符或逗號。 或者,您可以使用[\\s+,]
作為正則表達式模式。演示:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
String blah = "file.csv";
File file = new File(blah);
try (Scanner iterate = new Scanner(file)) {
iterate.nextLine(); // skips the first line
while (iterate.hasNextLine()) {
String line = iterate.nextLine();
String[] values = line.split("[\\s+,]");
System.out.println(Arrays.toString(values));
}
}
}
}
輸出:
[2019-05-07, 19:17:23, x, y, z]
[2019-03-30, 19:41:33, a, b, c]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.