编辑:找到解决方案 -
/**
* Returns the arguments of the method. Ensures inner methods are intact.
*
* @param fullMethod full method string
* @return arguments of the method
*/
public static String[] getArguments(String fullMethod) {
String innerFirstBrackets = fullMethod.substring(fullMethod.indexOf("(") + 1, fullMethod.lastIndexOf(")"));
if (innerFirstBrackets.contains("(") && innerFirstBrackets.contains(")")) {
List list = new List();
int count = 0;
int lastComma = 0;
for (int x = 0; x < innerFirstBrackets.length(); x++) {
if (innerFirstBrackets.charAt(x) == '(') {
count ++;
} else if (innerFirstBrackets.charAt(x) == ')') {
count --;
}
if (innerFirstBrackets.charAt(x) == ',' || x == innerFirstBrackets.length() - 1) {
if (count == 0) {
list.add(innerFirstBrackets.substring((lastComma == 0 ? -1 : lastComma) + 1,
(x == innerFirstBrackets.length() - 1 ? x + 1 : x)).trim());
lastComma = x;
}
}
}
return list.getItems();
} else {
// No inner methods
return innerFirstBrackets.split(",");
}
}
我试图在String
方法的表示中获取参数。到目前为止,我在大多数情况下都成功地做到了,但它不适用于某些情况。
这是我目前拥有的代码:
/**
* Returns the arguments of the method. Ensures inner methods are intact.
*
* @param fullMethod full method string
* @return arguments of the method
*/
public static String[] getArguments(String fullMethod) {
String innerFirstBrackets = fullMethod.substring(fullMethod.indexOf("(") + 1, fullMethod.lastIndexOf(")"));
if (innerFirstBrackets.contains("(") && innerFirstBrackets.contains(")")) {
List list = new List();
boolean first = false, second = false;
int lastComma = 0;
for (int x = 0; x < innerFirstBrackets.length(); x++) {
if (innerFirstBrackets.charAt(x) == '(') {
first = !second;
} else if (innerFirstBrackets.charAt(x) == ')') {
second = true;
}
if (first && second) {
first = second = false;
}
if (innerFirstBrackets.charAt(x) == ',' || x == innerFirstBrackets.length() - 1) {
if (!first) {
list.add(innerFirstBrackets.substring((lastComma == 0 ? -1 : lastComma) + 1,
(x == innerFirstBrackets.length() - 1 ? x + 1 : x)).trim());
lastComma = x;
}
}
}
return list.getItems();
} else {
// No inner methods
return innerFirstBrackets.split(",");
}
}
这在有一个方法作为参数时有效,但当存在多个以方法作为参数的参数时不起作用。这并不常见,但我不喜欢我的代码中存在漏洞。
有效的方法示例
get(get(1,2));
或者
get(get(get(get(1,2))));
或者
get(get(1),get(1));
但是当给出这样的东西时它不会起作用
get(get(get(1)),get(1));
我不知道如何找到姐妹括号,而不仅仅是找到下一个括号。(如果你不知道我所说的姐妹括号是什么意思,想想在大多数 IDE 上,当你突出显示一个括号时,另一个括号会自动突出显示。EX。