我正在从一个文件中读取文本,但在试图将列表1
和列表2
读入两个不同的字符串
时遇到了困难。*
指示第一个列表的结束位置。我试过使用数组,但数组只存储最后一个*符号。
List 1
Name: Greg
Hobby 1: Swimming
Hobby 2: Football
*
List 2
Name: Bob
Hobby 1: Skydiving
*
以下是我目前尝试的方法:
String s = "";
try{
Scanner scanner = new Scanner(new File("file.txt"));
while(scanner.hasnextLine()){
s = scanner.nextLine();
}
}catch(Exception e){
e.printStackTrace}
String [] array = s.split("*");
String x = array[0];
String y = array[1];
您的代码有多个问题,比如@henry说字符串只包含文件的最后一行,而且您误解了split()
,因为它将RegularExpression作为参数。
我建议您使用下面的示例,因为它可以工作,并且比您的方法快得多。
启动示例:
// create a buffered reader that reads from the file
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt")));
// create a new array to save the lists
ArrayList<String> lists = new ArrayList<>();
String list = ""; // initialize new empty list
String line; // initialize line variable
// read all lines until one becomes null (the end of the file)
while ((line = reader.readLine()) != null) {
// checks if the line only contains one *
if (line.matches("\\s*\\*\\s*")) {
// add the list to the array of lists
lists.add(list);
} else {
// add the current line to the list
list += line + "\r\n"; // add the line to the list plus a new line
}
}
看第一行:
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt")));
这一行创建了一个BufferedReader
,它与Scanner
几乎相同,但速度快得多,方法也不如Scanner
多。对于这种用法,BufferedReader
已经足够了。
然后它将InputStreamReader
作为构造函数中的参数。这只是为了将下面的FileInputStream
转换为阅读器
。
为什么要这么做?这是因为inputstream
≠reader
。InputStream
返回原始值,Reader
将其转换为人类可读字符。请参阅InputStream
和Reader
之间的区别。
看下一行:
ArrayList<String> lists = new ArrayList<>();
创建具有add()
和get(index)
等方法的变量数组。查看数组和列表的区别。
最后一个:
list += line + "\r\n";
此行将行
添加到当前列表中,并向其中添加新行。
“\r\n”
是特殊字符。\r
结束当前行,\n
创建新行。
我正在浏览https://ca.finance.yahoo.com/quote/aapl并想要得到股票价格的变化,绿色/红色文本。我已经能够刮除股票价格,但不能改变价值,因为他们位于相同的“div”类,但不同的“span”类。 我想要的文本:“-3.89(-1.36%)”-数字会有所不同 来自网站得HTML: 我用什么得到的价格:(282.80)-价格可能不同 我已经尝试了许多改变类名、span名
问题内容: 有什么方法可以从文本文件中读取特定行?在API或Apache Commons中。就像是 : 我同意实现起来很简单,但是特别是当文件很大时,效率不是很高。 问题答案: 可以,但是仍然存在效率问题。 或者,您可以使用: 由于有缓冲,这将稍微更有效。 看一下并尝试跳过整行(使用正则表达式)。我无法确定它是否会更有效- 对其进行基准测试。 PS 代表 效率, 我的意思是 记忆效率
所以我正在写一个代码来获取scanf一个文本文件并返回一个格式化的文本消息日志。我一直在想,当文件扫描行“332982000 20555552002 205551001 7 Webb先生,我能问你一个问题吗?”时,如何在某一点扫描文件中的字符串,并打印E.X点以外的所有字符串我将前4个数字扫描为整数,并将其余写入的文本扫描到从“Mr.Webb”开始的字符数组中。 我尝试使用一个for循环与fsca
如果这一行文本没有以方括号开头,我想把这一行连接到上面的一行。我可以读它在正常使用这个代码。我试着用String.StartsWith但是我搞不懂。 我正在寻找对此方法的更改,以使它以我想要的格式读取它,或者可能是一个将作用于我的并对此问题排序的方法。谢谢
我有这个代码below.What我想做的是读取一个文本文件,每行都有字符串分隔tabs.For示例(名称\t国家\t ID\t内容),其中\t是tab.Then我想只打印每行的第二列。我试图将整行拆分为标记,但它只适用于文件的第一行,然后它抛出ArrayIndexOutOfBoundsException。此外,当我尝试只打印第一列(标记[0])但不打印标记[1]时,它也很完美,我need.So我需