我有一个示例文本文件,基本上是一个java程序。我的任务是编写一个程序,可以读取文本文件的每一行,并确定它是否是赋值语句。如果它是赋值语句,那么我需要打印出该赋值语句中使用的变量名。这是我需要的输出:
ASSIGNMENT STATEMENT LEFT RIGHT
data=5; data
one=data; one data
x=5.6; x
test =(x+5.4)+one/x test x.one,x
age=3.5; age
number = 0.2*(age-10); number age
x=x+num; x x,num
我被卡住的地方是我提取x,一,x和第五行的部分。以及如何防止数字被打印。就像在data = 5中我怎么只打印数据并跳过5?
有人可以帮忙吗?
答案 0 :(得分:1)
您是否尝试过使用正则表达式?
String test = "(x+5.4)+one/x";
//regex: [0-9\"\/\,\(\)\+\-\*\.]+
test = test.replaceAll("[0-9\\\"\\/\\,\\(\\)\\+\\-\\*\\.]+",",");
System.out.println(test);
输出:
,x,one,x
然后,您可以使用以下命令替换第一个(最后一个)逗号:
test = test.replaceAll("^,", "").replaceAll(",$", "");
。
一些解释:
^
表示测试字符串的开头,$
代表结束[characters]+
表示我们正在寻找字符串的一部分(+
)
包含来自[]
的字符。 +
,它只会查找[]
中的一个字符。0-9
表示所有数字(范围从0
到9
)\
所有特殊字符之前添加",'\/()+-*.
\
之前添加额外的\
。您可以测试/修改here。
修改强> 评论示例:
String tem = "(x + 5.4)+ one/x";
tem=tem.replaceAll("[0-9\\\"\\/\\,\\(\\)\\+\\-\\*\\.\\s]+",","); //here added \\s, and comma in second param. Without comma all params will be glued together.
tem=tem.replaceAll("^,","").replaceAll(",$",""); //here you had space in second param of first replaceAll. Thats why the output was " xonex" - the space at the beginnig.
System.out.println(tem);
输出:
x,one,x
如果\s
添加到正则表达式(\\s
中必须为Java
) - space
的正则表达式。
请注意这个案例 - \S
表示除space
以外的所有内容。
还要注意replaceAll()
方法的第二个参数(","
)。它是您想要插入的字符串,代替找到的正则表达式(第一个参数)。因此,如果您的参数用逗号分隔,则必须使用","
作为第二个参数。如果你想删除一些东西(比如在这个例子的第二部分中我们从开头删除逗号,那么)你将""
作为第二个参数。
答案 1 :(得分:0)
请参阅下面的代码来解析赋值语句并打印表中提到的变量和操作数。您可以按行读取文件行并按如下方式解析它。
public static void main(String[] args) {
String code = "test =(x+5.4)+one/x";
if (code.endsWith(";")) {
code = code.substring(0, code.length() - 1);
}
String variable = code.substring(0, code.indexOf('=') - 1);
String expression = code.substring(code.indexOf('=') + 1);
List<String> operands = new ArrayList<String>();
StringTokenizer tokens = new StringTokenizer(expression, "+,-,/,*,(,),%,\",&,|,!,<,>,=,^,~,:,?");
while (tokens.hasMoreTokens()) {
String token = tokens.nextToken();
if (isNAN(token)) {
operands.add(token);
}
}
System.out.println("ASSIGNMENT STATEMENT\tLEFT\t\tRIGHT");
System.out.printf("%s\t%s\t\t%s", code, variable, operands);
}
private static boolean isNAN(String string) {
try {
Double.parseDouble(string.trim());
return false;
} catch (NumberFormatException nfe) {
//Do Nothing
return true;
}
}