所以我试图以这样的方式操纵用户的输入:当我在输入中找到某个字符串时,我将其转换为变量并用变量名替换字符串。 (我知道的混乱的解释,也许一个例子会让它更清楚)。
public class Test {
static List<String> refMap = new ArrayList<String>();
public static void main(String[] args) {
String x = "PROPERTY_X";
String y = "PROPERTY_Y";
refMap.add(x);
refMap.add(y);
String z = "getInteger("PROPERTY_X)";
String text = "q=PROPERTY_X+10/(200*PROPERTY_X)";
String text1 = "if(PROPERTY_X==10){"
+ "j=1;"
+ "PROPERTY_X=5; "
+ "if(true){"
+ "m=4/PROPERTY_X"
+ "}"
+ "}";
detectEquals(text);
}
public static String detectEquals(String text) {
String a = null;
text = TestSplitting.addDelimiters(text);
String[] newString = text.split(" ");
List<String> test = Arrays.asList(newString);
StringBuilder strBuilder = new StringBuilder();
HashMap<String, Integer> signs = new HashMap<String, Integer>();
HashMap<String, Integer> references = new HashMap<String, Integer>();
List<String> referencesList = new ArrayList<String>();
List<Integer> indexList = new ArrayList<Integer>();
int index = 0;
for (int i = 0; i < test.size(); i++) {
a = test.get(i).trim();
//System.out.println("a= " + a);
strBuilder.append(a);
index = strBuilder.length() - a.length();
if (a.equals("=")) {
signs.put(a, index);
indexList.add(index);
// System.out.println("signs map--> : "+signs.get(a));
}
if (refMap .contains(a)) {
references.put(a, index);
// System.out.println("reference index-> "+references.get(a));
// System.out.println("reference-> "+references.toString());
}
}
//stuck here
for (String s : references.keySet()) {
//System.out.println("references-> " + s);
int position = references.get(s);
for (int j : indexList) {
if (j <= position) {
System.out.println(j);
}
}
//strBuilder.insert(j - 1, "temp1=\r\n");
}
System.out.println(strBuilder);
return a;
}
假设用户输入字符串“text”的内容,我正在尝试解析该输入,所以当我找到“PROPERTY_X”时,我想从中创建一个变量并将其放在文本出现之前,然后将“PROPERTY_X”替换为新创建的变量的名称。
我也在搜索“=”符号的原因是因为我只想在整个输入中第一次出现“PROPERTY_X”时执行上述操作,然后只需将“PROPERTY_X”替换为“{1}}”否则我找到“PROPERTY_X”。
前:
tempVar1
随着用户输入变得越来越复杂,事情变得越来越复杂,但目前我只是尝试为我创建的第一个输入示例做正确的事情,然后从那里接受它:)。
正如你所看到的,我对逻辑部分有点困惑,我采用它的方式是:
我在字符串中找到所有“=”符号(当我转到更复杂的输入时,我需要搜索tempVar1=PROPERTY_X;
q=tempVar1+10/(200*tempVar1);
,if
,for
,{{1}等条件并且将它们和它们的索引保存到地图中,然后我对“PROPERTY_X”及其索引的出现也这样做。然后我尝试找到最接近“PROPERTY_X”索引的索引“=”并在那里插入我的新变量,之后我继续用变量名替换我需要的东西。
哦else
方法基于某些分隔符进行拆分,基本上插入列表中的“text”字符串看起来像这样:
while
欢迎任何建议。