有没有办法可以删除第3列中不包含0-23之间值的行。我总共有18列,我使用bufferReader
来读取它。我正在CSV文件中读取的文件是一个表。
public class CSVFileread {
private final ArrayList<String[]> Rs = new ArrayList<String[]>();
private String[] OneRow;
public ArrayList<String[]> ReadCSVfile(File DataFile) {
try {
BufferedReader brd = new BufferedReader(new FileReader(DataFile));
brd.readLine();
while (brd.ready()) {
String st = brd.readLine().trim();
OneRow = st.split(",");
Rs.add(OneRow);
System.out.println(Arrays.toString(OneRow));
}
}
catch (Exception e) {
JOptionPane.showMessageDialog(null,"System couldn't find the csv file");
//System.out.println("File not found:" + errmsg);
}
return Rs;
}
}
答案 0 :(得分:0)
试试这个:
import random
def split(S):
x = random.randint(0,len(S))
y = len(S)-x
S1 = S[0:x]
S2 = []
for i in range(len(S)):
if S[i] not in S1:
S2.append(S[i])
return S1,S2
注意:在开始变量或方法名称时,您应该只使用小写字母。大写应该用于类名。
答案 1 :(得分:0)
我建议您对这些行进行流式处理,然后过滤掉您不想存储的行。如下所示:
List<String[]> rows = bufferedReader.lines()
.map(l -> l.trim().split(","))
.filter(r -> Integer.valueOf(r[2]) >= 0 && Integer.valueOf(r[2]) <= 23)
.collect(Collectors.toList());
话虽如此,我建议你为18列的有意义字段的行创建一个类,然后在你的类中封装翻译和过滤逻辑。
因此,例如,如果您的行代表学生,那么您的代码将类似于:
class Student {
public static Optional<Student> fromCSV(String csvLine) {
String[] fields = csvLine.trim().split(",");
int age = Integer.valueOf(fields[2]);
...
if (age >= 0 && age <= 23)
return Optional.of(new Student(..., age, ...));
else
return Optional.empty();
}
}
List<Student> students = bufferedReader.lines()
.map(Student::fromCSV)
.filter(Optional::isPresent).map(Optional::get);