我是java的新手。我只是想读取java中的每个字符串并在控制台上打印。
代码:
public static void main(String[] args) throws Exception {
File file = new File("/Users/OntologyFile.txt");
try {
FileInputStream fstream = new FileInputStream(file);
BufferedReader infile = new BufferedReader(new InputStreamReader(
fstream));
String data = new String();
while ((data = infile.readLine()) != null) { // use if for reading just 1 line
System.out.println(""+data);
}
} catch (IOException e) {
// Error
}
}
如果文件包含:
Add label abc to xyz
Add instance cdd to pqr
我想从文件中读取每个单词并将其打印到新行,例如
Add
label
abc
...
之后,我想提取特定字符串的索引,例如获取abc
的索引。
有人可以帮助我吗?
答案 0 :(得分:1)
在打印输出之前,只需添加for-each循环: -
while ((data = infile.readLine()) != null) { // use if for reading just 1 line
for(String temp : data.split(" "))
System.out.println(temp); // no need to concatenate the empty string.
}
这将自动打印从文件中读取的每个String行获得的单个字符串。\ / p>
之后,我想提取特定字符串的索引 instance获取abc的索引。
我不知道你究竟在谈论什么指数。但是,如果要从正在读取的各行中获取索引,则添加一个初始化为0的临时变量。
将此值增加到d等于abc
。喜欢,
int count = 0;
for(String temp : data.split(" ")){
count++;
if("abc".equals(temp))
System.out.println("Index of abc is : "+count);
System.out.println(temp);
}
答案 1 :(得分:1)
听起来你希望能做两件事:
在这种情况下,我建议扫描所有行,按任何空格字符(空格,制表符等)拆分并存储在集合中,以便以后可以搜索它。不是问题 - 你能重复吗?在这种情况下你想要打印哪个索引?首先?最后?所有这些?
假设单词是唯一的,您可以这样做:
public static void main(String[] args) throws Exception {
File file = new File("/Users/OntologyFile.txt");
ArrayList<String> words = new ArrayList<String>();
try {
FileInputStream fstream = new FileInputStream(file);
BufferedReader infile = new BufferedReader(new InputStreamReader(
fstream));
String data = null;
while ((data = infile.readLine()) != null) {
for (String word : data.split("\\s+") {
words.add(word);
System.out.println(word);
}
}
} catch (IOException e) {
// Error
}
// search for the index of abc:
for (int i = 0; i < words.size(); i++) {
if (words.get(i).equals("abc")) {
System.out.println("abc index is " + i);
break;
}
}
}
如果你不打破,它会打印abc
的每个索引(如果单词不是唯一的)。如果单词集非常大,你当然可以更好地优化它,但对于少量数据,这应该足够了。
当然,如果你提前知道哪些词语&#39;您想要打印的索引,您可以放弃额外的数据结构(ArrayList
),只需在扫描文件时打印,除非您希望打印(单词和特定索引)在输出中。
答案 2 :(得分:1)
使用正则表达式String
拆分任何空格所收到的\\s+
,并使用for
循环打印出结果数据。
public static void main(String[] args) { // Don't make main throw an exception
File file = new File("/Users/OntologyFile.txt");
try {
FileInputStream fstream = new FileInputStream(file);
BufferedReader infile = new BufferedReader(new InputStreamReader(fstream));
String data;
while ((data = infile.readLine()) != null) {
String[] words = data.split("\\s+"); // Split on whitespace
for (String word : words) { // Iterate through info
System.out.println(word); // Print it
}
}
} catch (IOException e) {
// Probably best to actually have this on there
System.err.println("Error found.");
e.printStackTrace();
}
}
答案 3 :(得分:0)
使用Split()
中的Class String
功能。您可以根据需要进行操作。
或
使用length
关键字在整个行中进行迭代
如果任何非字母字符获得substring()
并将其写入新行。
答案 4 :(得分:0)
List<String> words = new ArrayList<String>();
while ((data = infile.readLine()) != null) {
for(String d : data.split(" ")) {
System.out.println(""+d);
}
words.addAll(Arrays.asList(data));
}
//words List will hold all the words. Do words.indexOf("abc") to get index
if(words.indexOf("abc") < 0) {
System.out.println("word not present");
} else {
System.out.println("word present at index " + words.indexOf("abc"))
}