[英]Trying to read from text file using string.split
我正在尝试通读一个文本文件,以便我可以按名称查找一本书,然后输出其属性,而结果却很奇怪。 救命?
这是代码:
System.out.print( "Enter name of book: " );
input2 = scanner.nextLine();
this.setName(input2);
String bookName = getInfo.readLine();
int i = 0, num = 0;
while(bookName != null)
{
String[] bookNames = bookName.split("|");
i++;
for(int j = (i*4-4); j<(i*4); j++)
{
if (bookNames[j] == this.name){
num = 1;
}
}
if(num == 1){
System.out.println(bookName);
num = 0;
}
bookName = getInfo.readLine();
}
这是文件:
糖果man |涂鸦| 4586 | 45.0 |
摇篮|迈克尔| 1111 | 1.0 |
这是输出:
按1添加一本书,然后按2查找一本书。
2
您想如何搜索这本书?
1个
输入书名:糖果man
C
一种
ñ
d
升
Ë
|
出口?
C
似乎您尝试读取以竖线(|)为分隔符的CSV文件。 为什么不只使用CSV库,例如: http : //opencsv.sourceforge.net/
然后,您可以使用以下命令设置定界符:
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '|');
然后,您可以逐行搜索所需的书来阅读文件:
CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), '|');
String [] nextLine;
while ((nextLine = reader.readNext()) != null)
{
// nextLine[] is an array of values from the line
if(nextLine[0] == desiredBookName)
{
// Output desired attributes
}
}
|
是正则表达式中的特殊字符。 因此,您将需要对其进行转义。
String[] bookNames = bookName.split("\\|"); // Not the 2 backslashes.
|
在正则表达式中用作交流发电机(OR)。 所以用"|"
分割 与用""
分割相同,表示分割每个字符。 这就是输出多个字符的原因。 将特殊符号转义为"\\\\|"
观察:
完成bookNames[j] == this.name
请勿使用==
比较两个对象。 而是使用bookNames[j].equals(this.name);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.