这里的编程比较新,所以如果这是相当基本的话我会道歉。
我正在尝试将字符串行转换为不同类型的实际变量。 我的输入是以下格式的文件:
double d1, d2 = 3.14, d3;
int a, b = 17, c, g;
global int gInt = 1;
final int fInt = 2;
String s1, s2 = "Still with me?", s3;
此时这些行都是字符串。我希望从字符串中提取变量并接收实际变量,以便我可以使用和操作它们。
到目前为止,我尝试使用正则表达式,但我在这里磕磕绊绊。我们会喜欢这方面的可能性。 我想过制作一般类型格式,例如:
public class IntType{
boolean finalFlag;
boolean globalFlag;
String variableName;
IntType(String variableName, boolean finalFlag, boolean globalFlag){
this.finalflag = finalFlag;
this.globalFlag = globalFlag;
this.variableName = variableName;
}
}
为每个变量类型创建一个新的包装器。
通过使用和操作,我想在我创建的包装器之间进行比较,并检查重复的声明等等。
但我不知道我是否走在正确的道路上。
注意:忽略不良格式(即没有&#34 ;;"最后等等)
答案 0 :(得分:1)
虽然其他人说这是不可能的,但实际上是这样。然而,它有点深入Java。只需搜索java dynamic classloading
即可。例如这里:
Method to dynamically load java class files
它允许您在运行时动态加载java文件。但是,您当前的输入看起来不像java文件,但可以通过使用小包装类包装它来轻松转换为一个文件:
public class CodeWrapper() {
// Insert code from file here
}
在将ressource作为类加载之前,您可以通过简单的文件或文本操作来完成此操作。
加载课程后,您可以通过reflection
访问其变量,例如
Field[] fields = myClassObject.getClass().getFields();
这允许您访问可见性修饰符,变量类型,名称,内容等。
当然这种方法假设你的代码实际上是有效的java代码。 如果不是,并且您正在尝试确认是否,则可以尝试加载它。如果失败,则无效。
答案 1 :(得分:0)
我没有使用Java的经验,但据我所知,实际上不可能使用任何语言的文件创建变量。您将需要创建某种列表对象,该对象可以容纳特定类型的可变数量的项目。然后,您可以从文件中读取值,将它们解析为您想要的类型,然后将其保存到相应类型的列表中。
编辑:
如果我是你,我会尽可能改变我的档案布局。它看起来像这样:
1 2 3 4 //1 int, 2 floats, 3 booleans and 4 strings
53
3.14
2.8272
true
false
false
#etc.
在伪代码中,您将按如下方式阅读:
string[] input = file.Readline().split(' '); // Read the first line and split on the space character
int[] integers = new int[int.Parse(input[0])] // initialise an array with specefied elements
// Make an array for floats and booleans and strings the same way
while(not file.eof) // While you have not reached the end of the file
{
integers.insert(int.Parse(file.ReadLine())) // parse your values according to the size which was given on the first line of the file
}
如果无法更改文件布局,则必须进行一些智能字符串拆分以从文件中提取值,然后创建某种动态数组,并在向其添加更多值时调整其大小。
更多编辑:
根据您的评论:
您首先想要拆分'='字符。从分割的前半部分开始,您需要搜索一个类型,从下半部分开始,您可以再次分析','以查找所有值。