如何在 java 中使用带有 , 分隔符的分词器?
How to use tokenizer in java with , delimiters?
我有一个示例输入文件如下 -
OPCODE R1, R2, R3
OPCODE R2, #30
while(scanner.hasNextLine()){
StringTokenizer st = new StringTokenizer(scanner.nextLine());
Instruction instruction = new Instruction();
instruction.setAddress(PC + PC_increment);
instruction.setOpcode(st.nextToken());
if(st.hasMoreTokens()) {
instruction.setDest(st.nextToken());
}
if(st.hasMoreTokens()) {
String nextToken = st.nextToken();
if(nextToken.charAt(0)== '#') {
instruction.setSource_1(nextToken.split("#")[1]);
}
else {
instruction.setSource_1(nextToken);
}
}
if(st.hasMoreTokens()) {
instruction.setSource_2(st.nextToken());
}
}
当我尝试打印令牌时,我得到 "R1," 和 "R2," 作为输出。但是,我只期望 R1 或 R2 作为输出。另外,在第二行的情况下,我不想要 #
。我该怎么做?我做错了什么?
StringTokenizer
的默认分隔符是 space 字符(space、制表符、换行符),不是 逗号 ,
。那么第一行的标记是:"OPCODE"、"R1,"、"R2," 和 "R3".
如果你想在白色上分割字符串 spaces and 你应该使用逗号(注意在默认的末尾添加 ,
分隔符列表):
StringTokenizer st = new StringTokenizer(scanner.nextLine(), " \t\n\r\f,");
同样要删除前导 #
,您可以直接
if(nextToken.startWith("#")) {
instruction.setSource_1(nextToken.substring(1));
}
但是,如果您阅读 JDK documentation,它是这样写的:
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
StringTokenizer class 现已弃用。推荐使用Stringclass或者regex(正则表达式)的split()方法
在代码中,标记之间的分隔符是逗号 (",") 所以你必须提到在字符串标记器中,否则默认标记分隔符是 "space"。所以我们必须提到
StringTokenizer st = new StringTokenizer(scanner.nextLine(),",");
您在引号中提到的内容将作为标记之间的分隔符。
您也可以使用 subString 方法删除“#”。
我有一个示例输入文件如下 -
OPCODE R1, R2, R3
OPCODE R2, #30
while(scanner.hasNextLine()){
StringTokenizer st = new StringTokenizer(scanner.nextLine());
Instruction instruction = new Instruction();
instruction.setAddress(PC + PC_increment);
instruction.setOpcode(st.nextToken());
if(st.hasMoreTokens()) {
instruction.setDest(st.nextToken());
}
if(st.hasMoreTokens()) {
String nextToken = st.nextToken();
if(nextToken.charAt(0)== '#') {
instruction.setSource_1(nextToken.split("#")[1]);
}
else {
instruction.setSource_1(nextToken);
}
}
if(st.hasMoreTokens()) {
instruction.setSource_2(st.nextToken());
}
}
当我尝试打印令牌时,我得到 "R1," 和 "R2," 作为输出。但是,我只期望 R1 或 R2 作为输出。另外,在第二行的情况下,我不想要 #
。我该怎么做?我做错了什么?
StringTokenizer
的默认分隔符是 space 字符(space、制表符、换行符),不是 逗号 ,
。那么第一行的标记是:"OPCODE"、"R1,"、"R2," 和 "R3".
如果你想在白色上分割字符串 spaces and 你应该使用逗号(注意在默认的末尾添加 ,
分隔符列表):
StringTokenizer st = new StringTokenizer(scanner.nextLine(), " \t\n\r\f,");
同样要删除前导 #
,您可以直接
if(nextToken.startWith("#")) {
instruction.setSource_1(nextToken.substring(1));
}
但是,如果您阅读 JDK documentation,它是这样写的:
StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
StringTokenizer class 现已弃用。推荐使用Stringclass或者regex(正则表达式)的split()方法
在代码中,标记之间的分隔符是逗号 (",") 所以你必须提到在字符串标记器中,否则默认标记分隔符是 "space"。所以我们必须提到 StringTokenizer st = new StringTokenizer(scanner.nextLine(),",");
您在引号中提到的内容将作为标记之间的分隔符。
您也可以使用 subString 方法删除“#”。