I/O java 中的文件读取问题
I/O file reading issue in java
我有一个用汇编语言编写的文件 MOV R1,1
,现在我要做的是我必须像
一样阅读它
首先它应该扫描 MOV,
然后R1
、
然后 1
.`
但是当我使用 input.next() 时,它扫描得像
移动
然后是 R1,1
我该怎么办?
您可以使用 *String.split()*
方法来 拆分带有逗号的标记:
String[] ar=str.split(",");
之后,得到两个值。
string part1 = ar[0];
double part2 = ar[1];
在这种情况下 R1
将存储在 part1
这是一个适合您的工作示例:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
public class BufferedReaderExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("testing.txt")))
{
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
String[] parts = sCurrentLine.split(" ");
System.out.println(Arrays.toString(parts));
List<String> splitNames = new ArrayList<>();
for (String name : parts) {
splitNames.addAll(Arrays.asList(name.split(",")));
}
for (String splitName : splitNames) {
System.out.println(splitName);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
testing.txt 包含:
MOV R1,1
输出:
MOV R1,1
[MOV, R1,1]
MOV
R1
1
如您所见,代码的作用是:对于每一行,用空格分隔各个部分
String[] parts = sCurrentLine.split(" ");
(这会让你 MOV
和 R1,1
)
那你要用逗号分割得到的token:
splitNames.addAll(Arrays.asList(name.split(",")));
那你就可以开始了,因为你的标记用逗号等分隔,如你所愿:
MOV
R1
1
大多数流中的默认分隔符是 "space"。虽然有些允许您通过 useDelimiter(...)
方法更改它们。查看您的特定流的 JavaDoc。
使用 Java8 和流的解决方案:
try (BufferedReader bufferedReader = new BufferedReader(new FileReader("f.txt"))) {
List<String> words = bufferedReader.lines()
.map(line -> line.split("[\s,]"))
.flatMap(Arrays::stream)
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}
我有一个用汇编语言编写的文件 MOV R1,1
,现在我要做的是我必须像
首先它应该扫描 MOV,
然后R1
、
然后 1
.`
但是当我使用 input.next() 时,它扫描得像
移动
然后是 R1,1
我该怎么办?
您可以使用 *String.split()*
方法来 拆分带有逗号的标记:
String[] ar=str.split(",");
之后,得到两个值。
string part1 = ar[0];
double part2 = ar[1];
在这种情况下 R1
将存储在 part1
这是一个适合您的工作示例:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
public class BufferedReaderExample {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("testing.txt")))
{
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
String[] parts = sCurrentLine.split(" ");
System.out.println(Arrays.toString(parts));
List<String> splitNames = new ArrayList<>();
for (String name : parts) {
splitNames.addAll(Arrays.asList(name.split(",")));
}
for (String splitName : splitNames) {
System.out.println(splitName);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
testing.txt 包含:
MOV R1,1
输出:
MOV R1,1
[MOV, R1,1]
MOV
R1
1
如您所见,代码的作用是:对于每一行,用空格分隔各个部分
String[] parts = sCurrentLine.split(" ");
(这会让你 MOV
和 R1,1
)
那你要用逗号分割得到的token:
splitNames.addAll(Arrays.asList(name.split(",")));
那你就可以开始了,因为你的标记用逗号等分隔,如你所愿:
MOV
R1
1
大多数流中的默认分隔符是 "space"。虽然有些允许您通过 useDelimiter(...)
方法更改它们。查看您的特定流的 JavaDoc。
使用 Java8 和流的解决方案:
try (BufferedReader bufferedReader = new BufferedReader(new FileReader("f.txt"))) {
List<String> words = bufferedReader.lines()
.map(line -> line.split("[\s,]"))
.flatMap(Arrays::stream)
.collect(Collectors.toList());
} catch (IOException e) {
e.printStackTrace();
}