簡體   English   中英

當出現空格時,在Java中用空格分割字符串?

[英]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

幾點建議:

  1. 使用Scanner#nextLineScanner#hasNextLine
  2. 使用try-with-resources語句。
  3. 由於行以空格或逗號作為分隔符,因此請使用正則表達式模式\\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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM