在 java 中读取带有多个定界符的文件行
Reading file line with multiple delimiters in java
我正在尝试逐行读取包含多个分隔符的文件。我正在使用正则表达式进行拆分,但它没有考虑 space (" ") 作为分隔符。文件包含 ;、#、, 和 space 作为分隔符。我究竟做错了什么?
文件行如下所示 - ADD R1, R2, R3
public static void initialize() throws IOException {
PC = 4000;
BufferedReader fileReader = new BufferedReader(new FileReader("test/ascii.txt"));
String str;
while((str = fileReader.readLine()) != null){
Instruction instruction = new Instruction();
String[] parts = str.split("[ ,:;#]");
instruction.instrAddr = String.valueOf(PC++);
System.out.println(instruction.instrAddr);
instruction.opcode = parts[0];
System.out.println(instruction.opcode);
instruction.dest = parts[1];
System.out.println(instruction.dest);
instruction.source_1 = parts[2];
System.out.println(instruction.source_1);
instruction.source_2 = parts[3];
System.out.println(instruction.source_2);
}
fileReader.close();}
输出打印 4000(PC 值)、ADD、R1、" " 和 R2。如何避免space?正则表达式 str.split("[ ,:;#]"); 有什么问题吗? ?
你确定那些真的是 space 吗?
这应该适用于任何白色-space:
@Test
public void test() {
String s = "1 2,3:4;5#6\t7";
Assert.assertEquals(7, s.split("[\s,:;#]").length);
}
我正在尝试逐行读取包含多个分隔符的文件。我正在使用正则表达式进行拆分,但它没有考虑 space (" ") 作为分隔符。文件包含 ;、#、, 和 space 作为分隔符。我究竟做错了什么? 文件行如下所示 - ADD R1, R2, R3
public static void initialize() throws IOException {
PC = 4000;
BufferedReader fileReader = new BufferedReader(new FileReader("test/ascii.txt"));
String str;
while((str = fileReader.readLine()) != null){
Instruction instruction = new Instruction();
String[] parts = str.split("[ ,:;#]");
instruction.instrAddr = String.valueOf(PC++);
System.out.println(instruction.instrAddr);
instruction.opcode = parts[0];
System.out.println(instruction.opcode);
instruction.dest = parts[1];
System.out.println(instruction.dest);
instruction.source_1 = parts[2];
System.out.println(instruction.source_1);
instruction.source_2 = parts[3];
System.out.println(instruction.source_2);
}
fileReader.close();}
输出打印 4000(PC 值)、ADD、R1、" " 和 R2。如何避免space?正则表达式 str.split("[ ,:;#]"); 有什么问题吗? ?
你确定那些真的是 space 吗?
这应该适用于任何白色-space:
@Test
public void test() {
String s = "1 2,3:4;5#6\t7";
Assert.assertEquals(7, s.split("[\s,:;#]").length);
}