仅获取Java中CSV的前两个位置
我有一个包含德国汽车牌照的csv文件。结构如下: B、 德国柏林 第一个B是城市的第一个大写字母,第二个位置是城市,第三个位置是国家 我只想要前两个位置,只有B和Berlin 我知道如何用Java读取CSV文件,但我不知道如何告诉编译器“忽略”第三个位置仅获取Java中CSV的前两个位置,java,csv,Java,Csv,我有一个包含德国汽车牌照的csv文件。结构如下: B、 德国柏林 第一个B是城市的第一个大写字母,第二个位置是城市,第三个位置是国家 我只想要前两个位置,只有B和Berlin 我知道如何用Java读取CSV文件,但我不知道如何告诉编译器“忽略”第三个位置 public void read(){ InputStream inputStream = getResources().openRawResource(R.raw.carplates); BufferedReader rea
public void read(){
InputStream inputStream = getResources().openRawResource(R.raw.carplates);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String csvLine;
while ((csvLine = reader.readLine()) != null) {
String[] row = csvLine.split(",");
for(int i=0; i<row.length;i++){
Log.d("ROWS", row[i]);
}
}
public void read(){
InputStream InputStream=getResources().openRawResource(R.raw.carplates);
BufferedReader reader=新的BufferedReader(新的InputStreamReader(inputStream));
试一试{
弦线;
而((csvLine=reader.readLine())!=null){
字符串[]行=csvLine.split(“,”);
对于(int i=0;i您可以更新for循环条件,使其仅读取列表的前两个元素
差不多
public void read(){
InputStream inputStream = getResources().openRawResource(R.raw.kfzkennzeichen);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String csvLine;
while ((csvLine = reader.readLine()) != null) {
String[] row = csvLine.split(",");
if (row.lenght >= 2){
for(int i=0; i<2;i++){
Log.d("ROWS", row[i]);
}
}else{
Log.d("Invalid Row");
}
}
public void read(){
InputStream InputStream=getResources().openRawResource(R.raw.kfzkennzeichen);
BufferedReader reader=新的BufferedReader(新的InputStreamReader(inputStream));
试一试{
弦线;
而((csvLine=reader.readLine())!=null){
字符串[]行=csvLine.split(“,”);
如果(行长>=2){
对于(int i=0;i您可以更新for循环条件,使其仅读取列表的前两个元素
差不多
public void read(){
InputStream inputStream = getResources().openRawResource(R.raw.kfzkennzeichen);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String csvLine;
while ((csvLine = reader.readLine()) != null) {
String[] row = csvLine.split(",");
if (row.lenght >= 2){
for(int i=0; i<2;i++){
Log.d("ROWS", row[i]);
}
}else{
Log.d("Invalid Row");
}
}
public void read(){
InputStream InputStream=getResources().openRawResource(R.raw.kfzkennzeichen);
BufferedReader reader=新的BufferedReader(新的InputStreamReader(inputStream));
试一试{
弦线;
而((csvLine=reader.readLine())!=null){
字符串[]行=csvLine.split(“,”);
如果(行长>=2){
对于(int i=0;i跳过打印最后一行:
for(int i=0; i<row.length - 1; i++){
Log.d("ROWS", row[i]);
}
for(int i=0;i跳过打印最后一行:
for(int i=0; i<row.length - 1; i++){
Log.d("ROWS", row[i]);
}
for(inti=0;i//理想情况下,这应该在配置文件中
int maxIndexToRead=2;
对于(int i=0;i
是的,Allman风格的规则;)//理想情况下,这应该在配置文件中
int maxIndexToRead=2;
对于(int i=0;i
是的,Allman样式规则;)如果您愿意,您可以消除for循环,如:
public void read() {
InputStream inputStream = getResources().openRawResource(R.raw.carplates);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String csvLine;
while((csvLine = reader.readLine()) != null) {
String[] row = csvLine.split(",");
Log.d("First capital letter of the city: ", row[0]);
Log.d("City: ", row[1]);
}
} catch(...) {
//...
}
}
但正如@Akceptor在另一个答案中提到的那样,只有在您确定CSV始终采用这种格式时,才可以这样做
此外,通过这种方法,如果您愿意,您可以轻松地将行转换为类实例。如果您愿意,您可以消除for循环,如:
public void read() {
InputStream inputStream = getResources().openRawResource(R.raw.carplates);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String csvLine;
while((csvLine = reader.readLine()) != null) {
String[] row = csvLine.split(",");
Log.d("First capital letter of the city: ", row[0]);
Log.d("City: ", row[1]);
}
} catch(...) {
//...
}
}
但正如@Akceptor在另一个答案中提到的那样,只有在您确定CSV始终采用这种格式时,才可以这样做
同样,通过这种方法,如果需要,您可以轻松地将行转换为类实例。apachecommons CSV
关于您的具体问题,其他答案都是正确的。此外,下面是使用库的示例代码,以使这项工作更容易
注意我们如何检索这3个字段中的每一个,但只使用前2个字段,忽略第三个字段(根据您的问题)
package com.basilbourque.example;
导入org.apache.commons.csv.CSVFormat;
导入org.apache.commons.csv.CSVRecord;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
公共级城市旅行者{
公共静态void main(字符串[]args){
CityLetter应用程序=新CityLetter();
app.doit();
}
私有无效doit(){
试一试{
//找到要导入和分析的文件。
Path Path=Path.get(“/Users/basilbourque/CityLetter.csv”);
if(Files.notExists(path)){System.out.println(“错误-找不到路径:+path+”的文件。消息#f31b73b0-7ba7-4ea8-81b4-c8d768dde99d。”);)
//读取CSV文件。
//对于每一行,使用三个字段中的两个(字母、城市),而忽略第三个字段(国家)。
BufferedReader reader=Files.newBufferedReader(路径);
Iterablerecords=CSVFormat.RFC4180.parse(reader);
用于(CSVRecord记录:记录){
//B,柏林,德国
//巴黎,法国
//T,突尼斯,突尼斯
String letter=record.get(1-1);//讨厌的基于零的索引计数。
字符串city=record.get(2-1);
String country=record.get(3-1);//忽略。
//使用3个值中的2个。
System.out.println(“字母:+字母+”|城市:+城市);
//城市=新城(字母,城市);
//城市列表。添加(城市);
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
}
跑步的时候
信函:B |城市:柏林
信函:p|城市:巴黎
信:T|市:突尼斯
按名称引用列
或者,您可以按名称而不是索引号引用每一列。添加标题行,然后在CSVFormat.RFC4180
上添加另一个调用以查找这些标题
请参阅类似问题的示例代码。Apache Commons CSV
关于您的具体问题,其他答案都是正确的。此外,下面是使用库的示例代码,以使这项工作更容易
注意我们如何检索这3个字段中的每一个,但只使用前2个字段,忽略第三个字段(根据您的问题)
package com.basilbourque.example;
导入org.apache.commons.csv.CSVFormat;
导入org.apache.commons.csv.CSVRecord;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
公共级城市旅行者{
公共静态void main(字符串[]args){
CityLetter应用程序=新CityLetter();
app.doit();
}
私有无效doit(){
试一试{
//瞧