提问人:Samuel Mideksa 提问时间:5/5/2021 最后编辑:Samuel Mideksa 更新时间:5/5/2021 访问量:942
如何使用扫描仪从 java 中的文本文件中读取列?
How to read a column from a text file in java using scanner?
问:
我有这个文本,我想从我的名为 Data.txt 的项目中阅读第一列。
//column names: productId, name,numInStock,provider,pricePerUnit
private static String records = "231A,Light Bulb,123,Wilco,1.75:"+
"113D,Hairbrush,19,Aamco,3.75:"+
"521W,Shampoo,24,Acme,6.95:"+
"440Q,Dishwashing Detergent,20,Wilco,1.75:"+
"009G,Toothbrush,77,Wilco,0.85:"+
"336C,Comb,34,Wilco,0.99:"+
"523E,Paper Pad Set,109,Congdon and Chrome,2.45:"+
"888A,Fake Diamond Ring,111,Americus Diamond,3.95:"+
"176A,Romance Nove1 1,20,Barnes and Noble,3.50:"+
"176B,Romance Nove1 2,20,Barnes and Noble,3.50:"+
"176C,Romance Nove1 3,20,Barnes and Noble,3.50:"+
"500D,Floss,44,Wilco,1.25:"+
"135B,Ant Farm,5,Wilco,8.00:"+
"211Q,Bicycle,9,Schwinn,75.95:"+
"932V,Pen Set,50,Congdon and Chrome,9.95:"+
"678Q,Pencil 50,123,Congdon and Chrome,9.95:"+
"239A,Colored Pencils,25,Congdon and Chrome,4.75:"+
"975B,Shower Curtain,25,Wilco,6.50:"+
"870K,Dog Bowl,15,Wilco,4.75:"+
"231S,Cat Bowl,15,Wilco,4.75:"+
"562M,Kitty Litter,15,Wilco,3.25:"+
"777X,Dog Bone,15,Wilco,4.15:"+
"933W,Cat Toy,15,Wilco,2.35:"+
"215A,Hair Ball,0,Little Jimmy,0.00:";
我写了这段代码来这样做,但我没有得到所需的输出。 我的代码是
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Scanner input = new Scanner(System.in);
File file = new File("C:\\Users\\student\\Desktop\\workspace\\Welcome\\src\\Data.txt");
input = new Scanner(file);
while (input.hasNextLine()) {
String line = input.nextLine();
String[] words = line.split(",");
System.out.println(words[0]);
input.useDelimiter(",");
}
input.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
我想以这种格式获取输出
134A
213A
911C
012E
662Z
这是我得到的输出,我想删除说私有静态字符串记录 = 的部分,以及“.
//column names: productId
private static String records = "231A
"113D
"521W
"440Q
"009G
"336C
"231S
答:
1赞
MattDog_222 Overwatch
5/5/2021
#1
你和熟食仪走在正确的轨道上。 这是我是如何做到的,它可以清理一下,你必须做一个for循环来遍历数组列表并获取每一个,并拆分每一个并打印每个的0'th index(“str”是你提供的字符串/文本文件)
Scanner in = new Scanner(str) ;
in.useDelimiter(":") ;
ArrayList<String> al = new ArrayList<>() ;
while( in.hasNext())
{
al.add(in.next() ) ;
}
for( int i = 0 ; i < al.size(); ++i )
{
String s = al.get(i) ;
String[] s2 = s.split(",") ;
System.out.println( s2[0] );
}
评论
0赞
Samuel Mideksa
5/5/2021
我试过你的答案,但它对我不起作用
0赞
MattDog_222 Overwatch
5/5/2021
我现在附加了 for 循环。你不能这样做,因为 s2 数组只有 5 个长度。它必须是静态 0(第一列)s2[i]
0赞
Stephen C
5/5/2021
@SamuelMideksa - 请更具体。
0赞
Samuel Mideksa
5/5/2021
@MattDog_222Overwatch 现在它可以工作了,但我仍然得到这个字符“以及输出中的”+ 字符”
0赞
MattDog_222 Overwatch
5/5/2021
我会仔细检查您是否在某处运行任何额外的代码,因为我没有添加任何额外的字符。任何地方都不应该有文字“+”,因为字符串不包含任何文字。
评论
private static String records = ...
文件的内容是吗?如果是这样,您应该先用逗号而不是逗号拆分以获取行,然后用逗号拆分每行并获取每个数组中的第一项。:
,
private static String records =
" ... "
+
records